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.

Kirt
sumber
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;
}
Nick Craver
sumber
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!

Fabiano
sumber
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();
Kangkan
sumber
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 = "";
Dmitry Shintyakov
sumber
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);
    }        
}
Rodrigo Longo
sumber
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
31

Ini cara yang singkat:

document.getElementById('mySelect').innerText = null

Satu baris, tidak untuk, tanpa JQuery, sederhana.

Petugas pemadam kebakaran26
sumber
Bukan yang terpendek, lihat jawaban saya di bawah ini.
pengguna
16
function removeOptions(obj) {
    while (obj.options.length) {
        obj.remove(0);
    }
}
Julio Garcia
sumber
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.

pengguna
sumber
11

Ini sedikit modern dan murni JavaScript

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

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

dengan PrototypeJS :

$('yourSelect').select('option').invoke('remove');
EpokK
sumber
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.

norgematos
sumber
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.

Manohar Reddy Poreddy
sumber
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();});
Storm Razor
sumber
4

Menggunakan JQuery adalah cara yang lebih cantik, lebih pendek & lebih cerdas untuk melakukannya!

$('#selection_box_id').empty();
Sobin Sunny
sumber
1
Ini hanyalah pengulangan dari jawaban yang ada ini .
Pang
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>

Vichu
sumber
3

Mundur. Alasannya adalah ukuran berkurang setelah setiap penghapusan.

for (i = (len-1); i > -1; i--) {
    document.getElementById("elementId").remove(i);
}
Dinesh Khetarpal
sumber
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

Nitika Chopra
sumber
2

Saya pikir itu sol terbaik. adalah

 $ ("# myselectid"). html (''); 

Ossama Zakaria
sumber
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>

nitka.pawel
sumber
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");
Dan Bray
sumber
1
var select = document.getElementById('/*id attribute of your select here*/');
for (var option in select){
    select.remove(option);
}
kyllo
sumber
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.

Tanpa nama
sumber
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]);
}
pengguna1910893
sumber
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.

Dan
sumber
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()
}
Piotr
sumber
-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);

        }
CHowdappaM
sumber
-2
var select =$('#selectbox').val();
pengguna3767285
sumber
1
Anda harus lebih deskriptif pada jawaban Anda
Krupa Patel