Bagaimana cara menghapus semua opsi di kotak dropdown?


153

Kode saya berfungsi di IE tetapi terputus di Safari, Firefox, dan Opera. (kejutan besar)

document.getElementById("DropList").options.length=0;

Setelah mencari, saya belajar bahwa itu length=0yang tidak disukainya.
Saya sudah mencoba ...options=nulldan var clear=0; ...length=cleardengan hasil yang sama.

Saya melakukan ini ke beberapa objek sekaligus, jadi saya mencari beberapa kode JS ringan.


Untuk menghancurkan semua opsi (!?), Dan tentang mengatur ulang riwayat peramban dari opsi yang dipilih setelah halaman penyegaran, untuk menggunakan HTML <option selected>?? (google taruh kami di sini tetapi tidak ada di sini) ... Lihat document.getElementById ("form1"). reset () solusi nyata.
Peter Krauss

Jawaban:


34

Anda dapat menggunakan yang berikut ini untuk menghapus semua elemen.

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = length-1; i >= 0; i--) {
  select.options[i] = null;
}

14
Mootools juga memiliki empty(), jadi Anda akan melakukannya$("DropList").empty();
Brian Koser

42
Ini sepertinya ide yang buruk - mengatur item ke nol tidak sama dengan menghapusnya.

9
Itu juga tidak berfungsi seperti yang diharapkan. Ketika saya menggunakan kode itu ia meninggalkan satu objek di dropdown.
gabrjan

9
Kode ini mungkin macet. Cara teraman untuk menjalankan loop secara terbalik.
Kangkan

19
Periksa jawaban lain untuk cara yang lebih baik untuk melakukan ini.
Tim Cavanaugh

296

Untuk menghapus opsi elemen HTML select, Anda dapat menggunakan remove()metode ini:

function removeOptions(selectElement) {
   var i, L = selectElement.options.length - 1;
   for(i = L; i >= 0; i--) {
      selectElement.remove(i);
   }
}

// using the function:
removeOptions(document.getElementById('DropList'));

Penting untuk menghapus optionsmundur; sebagai remove()metode menata ulang optionskoleksi. Dengan cara ini, dijamin bahwa elemen yang akan dihapus masih ada!


9
tepuk tangan untuk @Fabiano, ini sebenarnya menghapus item yang bertentangan dengan saran lainnya.
Constanta

4
kuncinya di sini adalah traversal mundur dari selectbox.options Saya pikir .... solusi ini gagal ketika saya mencoba meneruskan traversal
scottysseus

7
Ya, itu akan gagal karena metode remove () akan mengatur ulang array. Melakukannya mundur akan menjamin bahwa elemen yang akan dihapus akan ada.
Fabiano

Menambahkan selectbox.options.length = 0; pada akhir definisi mungkin membuatnya sempurna di semua browser.
omkar sirra

4
Kode sederhana adalah sementara (selectEl.options.length) selectEl.options.remove (0)
MiF

127

Jika Anda ingin memiliki skrip yang ringan, gunakan jQuery. Di jQuery, solusi untuk menghapus semua opsi akan seperti:

$("#droplist").empty();

46
Saya berpendapat bahwa tindakan menambahkan jQuery adalah kebalikan dari "ringan" ketika for (a in select.options) { select.options.remove(0); }bekerja dengan baik.
Artog

7
Itu tergantung pada konteksnya. Dalam aplikasi web, keterbacaan seratus baris $("#droplist").empty();kode jenis dibandingkan dengan ribuan baris vanilla JS menjadikannya sepadan dengan penambahan jQuery. Jika kita berbicara tentang markup / kosmetik untuk laman web sederhana, Anda 100% benar.
Half_Duplex

3
@AdamIngmansson Saya merasa bingung ketika orang-orang merendahkan penggunaan JQuery. Saya akan menggunakan metode seperti ini dengan asumsi bahwa para insinyur di balik JQ telah melakukan segala macam tes untuk menemukan yang terbaik, tercepat dan di atas semua cara yang paling dapat diandalkan untuk melakukan tugas (utilitas) tertentu. Inti dari JQ (atau perpustakaan yang baik) adalah untuk mengambil tugas-tugas duniawi sehingga Anda dapat berkonsentrasi pada hal-hal yang menarik.
mike rodent

2
@mikerodent Saya tidak ragu bahwa fungsinya sendiri adalah kualitas dan kinerja terbaik. Tapi memuat file 86kb (lib terkompresi versi 3.2.1) hanya untuk fungsi kecil itu tidak 'ringan' :) Tentu saja, jika Anda telah menggunakan banyak fungsi lainnya, itu akan layak menggunakan jQuery. Ini perpustakaan yang sangat bagus
Artog

1
@AdamIngmansson Cukup adil! Tapi saya sadar Anda tahu bahwa file JQ min.js sangat sering digunakan dan sering ditemukan dalam cache browser. Sedapat mungkin ada argumen yang bagus untuk mengatakan "selalu gunakan JQ dan anggap BUKAN menggunakannya sebagai bagian dari tahap optimasi, JIKA ini benar-benar terbukti perlu". Mungkin memang terbukti perlu dalam konteks tertentu (aplikasi telepon, dll.) ... ini di luar pengetahuan JS saya yang remeh.
mike rodent

105

Mungkin, bukan solusi terbersih, tetapi jelas lebih sederhana daripada menghapus satu-per-satu:

document.getElementById("DropList").innerHTML = "";

Saya biasanya menghindari innertHTML seperti wabah. Tetapi ini membuat segalanya jauh lebih sederhana sehingga saya benar-benar menyukainya.
petersaints

Saya tidak bisa melakukan ini. Tidak yakin mengapa tidak menghapus opsi yang dipilih dengan cara ini.
MikaelL

@MikaelL, ini berguna jika Anda menambahkan apa browser itu terjadi. Dan versinya, jika Anda ingat.
pengguna

70

Ini cara terbaik:

function (comboBox) {
    while (comboBox.options.length > 0) {                
        comboBox.remove(0);
    }        
}

Ini menyelamatkan saya hari ini, karena mekanisme 'for () {selectbox.remove ()}' entah bagaimana tidak menghapus semua opsi. Terima kasih.
sonlexqt

4
sedikit lebih pendek sebagaiwhile (comboBox.options.length) comboBox.remove(0);
EkriirkE


16
function removeOptions(obj) {
    while (obj.options.length) {
        obj.remove(0);
    }
}

1
Solusi ini adalah satu-satunya yang bekerja untuk saya. Iceweasel 10.0.12 dan Chrome 26.
davide

16

Saya ingin menunjukkan bahwa masalah dalam pertanyaan awal tidak relevan lagi hari ini. Dan bahkan ada versi yang lebih pendek dari solusi itu:

selectElement.length = 0;

Saya telah menguji bahwa kedua versi berfungsi di Firefox 52, Chrome 49, Opera 36, ​​Safari 5.1, IE 11, Edge 18, versi terbaru Chrome, Firefox, Samsung Internet dan UC Browser di Android, Safari di iPhone 6S, Android 4.2. 2 browser saham. Saya pikir aman untuk menyimpulkan bahwa itu benar-benar kompatibel dengan perangkat apa pun yang ada saat ini, jadi saya merekomendasikan pendekatan ini.


11

Ini sedikit modern dan murni JavaScript

document.querySelectorAll('#selectId option').forEach(option => option.remove())


1
Kode tercepat. Untuk pengujian coba hapus sekitar 250000 opsi
Andrej

7

dengan PrototypeJS :

$('yourSelect').select('option').invoke('remove');

6

Jika Anda menggunakan JQuery dan kontrol pilih Anda memiliki ID "DropList", Anda dapat menghapus opsinya dengan cara ini:

$('#DropList option').remove();

Sebenarnya itu bekerja untuk saya dengan daftar opsi apa saja, seperti datalist.

Semoga ini bisa membantu.


5
Jawaban yang baik harus mengandung lebih banyak detail dari ini. Pembaca mungkin tidak tahu bahwa Anda mungkin maksud jQuery.
Mifeet

5
@Metriet jika pengguna tidak tahu apa artinya JQuery di sini, ia harus berganti karier
Emilio Gort

6

Perhatikan bahwa pilih dapat memiliki keduanya
- grup pilihan &
- koleksi pilihan
sebagai anak-anaknya.

Begitu,

Metode # 1

var selectElement = document.getElementById('myselectid');
selectElement.innerHTML = '';

Metode # 2

var selectElement = document.getElementById('myselectid');
selectElement.textContent = '';

Saya diuji, keduanya bekerja di Chrome.
Saya suka yang sederhana, kuno, metode # 1.


1
Ini jawaban terbaik. Juga, jika Anda sudah memiliki referensi jquery ke pilih:$select.html('')
the_nuts

5

Mencoba

document.getElementsByTagName("Option").length=0

Atau mungkin lihat fungsi removeChild ().

Atau jika Anda menggunakan kerangka jQuery.

$("DropList Option").each(function(){$(this).remove();});


4

Ini dapat digunakan untuk menghapus opsi:

function clearDropDown(){
  var select = document.getElementById("DropList"),
      length = select.options.length;
  while(length--){
    select.remove(length);
  }
}
<select id="DropList" >
  <option>option_1</option>
  <option>option_2</option>
  <option>option_3</option>
  <option>option_4</option>
  <option>option_5</option>
</select>
<button onclick="clearDropDown()">clear list</button>


3

Mundur. Alasannya adalah ukuran berkurang setelah setiap penghapusan.

for (i = (len-1); i > -1; i--) {
    document.getElementById("elementId").remove(i);
}

3
var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length; i++) {
  select.options[i].remove();
}

Semoga kode ini akan membantu Anda



2

Solusi paling sederhana adalah yang terbaik, jadi Anda hanya perlu:

var list = document.getElementById('list');
while (list.firstChild) {
    list.removeChild(list.firstChild);
}
<select id="list">
  <option value="0">0</option>
  <option value="1">1</option>
</select>


2

Item harus dihapus secara terbalik, jika tidak maka akan menyebabkan kesalahan. Juga, saya tidak merekomendasikan pengaturan nilai null, karena hal itu dapat menyebabkan perilaku yang tidak terduga.

var select = document.getElementById("myselect");
for (var i = select.options.length - 1 ; i >= 0 ; i--)
    select.remove(i);

Atau jika Anda mau, Anda bisa membuatnya berfungsi:

function clearOptions(id)
{
    var select = document.getElementById(id);
    for (var i = select.options.length - 1 ; i >= 0 ; i--)
        select.remove(i);
}
clearOptions("myselect");

1
var select = document.getElementById('/*id attribute of your select here*/');
for (var option in select){
    select.remove(option);
}

1

Di atas kode jawaban perlu sedikit perubahan untuk menghapus daftar lengkap, silakan periksa bagian kode ini.

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length;) {
  select.options[i] = null;
  length = select.options.length;
}

menyegarkan panjang dan itu akan menghapus semua data dari daftar drop down. Semoga ini bisa membantu seseorang.


Tambahan yang bagus - bingung sejenak mengapa tidak menghapus semua opsi setiap kali.
Ralpharoo

0
while(document.getElementById("DropList").childNodes.length>0) 
{
    document.getElementById("DropList").removeChild(document.getElementById("DropList").childNodes[0]);
}

0

Jika Anda harus mendukung IE dan Anda memiliki lebih dari 100 item dalam daftar pilih Anda, saya sangat menyarankan Anda mempertimbangkan untuk mengganti pilih dengan fungsi seperti:

function clearOptions(select) {
    var selectParentNode = select.parentNode;
    var newSelect = select.cloneNode(false); // Make a shallow copy
    selectParentNode.replaceChild(newSelect, select);
    return newSelect;
}

Parameter yang dipilih harus elemen baik dari pemilih jquery atau document.getElementBy panggilan. Satu-satunya downside ke ini adalah bahwa Anda kehilangan acara yang telah ditransfer ke pilih, tetapi Anda dapat dengan mudah memasang kembali mereka karena dikembalikan kembali dari fungsi. Saya sedang bekerja dengan pilih yang memiliki ~ 3rb item dan itu akan memakan waktu 4 detik pada IE9 untuk menghapus pilih sehingga saya dapat memperbaruinya dengan konten baru. Hampir instan melakukannya dengan cara ini.


Anda dapat menemukan info lebih lanjut di sini: somacon.com/p542.php dan cara yang lebih sederhana:$('#selectbox').replaceWith($('#selectbox')[0].cloneNode(false));
FDisk

0

Untuk Vanilla JavaScript ada cara sederhana dan elegan untuk melakukan ini:

for(var o of document.querySelectorAll('#DropList > option')) {
  o.remove()
}

-1

Hari ini saya menghadapi masalah yang sama, saya lakukan seperti di bawah ini saat memuat ulang kotak pilih. (Dalam Plain JS)

        var select = document.getElementById("item");
        select.options.length = 0;
        var opt = document.createElement('option');
        opt.value = 0;
        opt.innerHTML = "Select Item ...";
        opt.selected = "selected";
        select.appendChild(opt);


       for (var key in lands) {
            var opt = document.createElement('option');
            opt.value = lands[key].id;
            opt.innerHTML = lands[key].surveyNo;
            select.appendChild(opt);

        }

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.