Bir açılır kutudaki tüm seçenekleri nasıl temizleyebilirim?


153

Kodum IE'de çalışıyor ancak Safari, Firefox ve Opera'da bozuluyor. (büyük sürpriz)

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

Aradıktan sonra, length=0hoşlanmadığını öğrendim .
Ben denedim ...options=nullve var clear=0; ...length=clearaynı sonucu.

Bir kerede birden çok nesneye yapıyorum, bu yüzden bazı hafif JS kodu arıyorum.


To imha tüm seçenekleri (!?) Ve yaklaşık HTML kullanmasına, yenileme sayfadan sonra seçilen seçeneklerin tarayıcının geçmişini sıfırlamak <option selected>?? (google bizi buraya koydu ama burada değil) ... Bkz. document.getElementById ("form1"). reset () gerçek çözüm.
Peter Krauss

Yanıtlar:


34

Tüm öğeleri temizlemek için aşağıdakileri kullanabilirsiniz.

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

14
MooTools da var empty(), bu yüzden yapardınız$("DropList").empty();
Brian Koser

42
Bu kötü bir fikir gibi görünüyor - öğeleri null değerine ayarlamak, onları kaldırmakla aynı şey değil.

9
Ayrıca beklendiği gibi çalışmaz. Bu kodu kullandığımda açılan bir nesne bırakır.
gabrjan

9
Bu kod çökebilir. Döngüyü tersine çalıştırmanın en güvenli yolu.
Kangkan

19
Bunu yapmanın daha iyi bir yolu için diğer yanıtları kontrol edin.
Tim Cavanaugh

296

HTML öğesinin seçeneklerini kaldırmak selectiçin remove()yöntemi kullanabilirsiniz :

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'));

optionsGeriye doğru kaldırmak önemlidir ; olarak remove()yöntemiyle yeniden düzenler optionskoleksiyonu. Bu şekilde, çıkarılacak elemanın hala mevcut olduğu garanti edilir!


9
@Fabiano için tezahürat, bu aslında diğer önerilerin aksine öğeleri kaldırır.
Köstence

4
Burada anahtar
selectbox.options

7
Evet, remove () yöntemi diziyi yeniden düzenleyeceği için başarısız olur. Geriye doğru yapılması, çıkarılacak elemanın var olmasını garanti eder.
Fabiano

Selectbox.options.length = 0 ekleme; tanımın sonunda tüm tarayıcılarda mükemmel olabilir.
omkar sirra

4
Basit kod ise (selectEl.options.length) selectEl.options.remove (0)
MiF

127

Hafif bir komut dosyasına sahip olmak istiyorsanız, jQuery için gidin. JQuery'de, tüm seçenekleri kaldırmak için çözüm aşağıdaki gibi olacaktır:

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

47
for (a in select.options) { select.options.remove(0); }İş ne zaman gayet iyi yapar jQuery ekleme eylemi "hafif" tersi olduğunu iddia ediyorum .
Artog

7
Bu koşullara bağlıdır. Bir web uygulamasında, $("#droplist").empty();binlerce satırlık vanilya JS'ye kıyasla yüz satırlık tip kodun okunabilirliği, jQuery'nin eklenmesine değer. Basit bir web sayfası için biçimlendirme / kozmetikten bahsediyorsak,% 100 haklısınız demektir.
Half_Duplex

3
@AdamIngmansson İnsanlar JQuery kullanımını kötüye kullandığında şaşırtıcı buluyorum. JQ arkasındaki mühendislerin belirli bir (yardımcı program) görev yapmanın en iyi, en hızlı ve her şeyden önce en güvenilir yollarını bulmak için her türlü testi yaptıkları varsayımına göre böyle bir yöntem kullanırdım. JQ'nun (veya herhangi bir iyi kütüphanenin) amacı, sıradan görevleri üstlenmektir, böylece ilginç şeylere konsantre olabilirsiniz.
mike kemirgen

2
@mikerodent Fonksiyonun kendisinin en yüksek kalitede ve performansta olduğundan şüphem yok. Ancak 86kb (sürüm 3.2.1'in sıkıştırılmış lib'i) dosyasını yüklemek sadece bu küçük işlev için 'hafif' değildir :) Tabii ki, diğer işlevlerin çoğunu kullanıyorsanız, jQuery kullanmaya değer olacaktır. Çok iyi bir kütüphane
Artog

1
@AdamIngmansson Yeterince adil! Ancak JQ min.js dosyasının sık sık bir tarayıcı önbelleğinde kullanıldığını bildiğinizi düşünüyorum. Öyle ki, "her zaman JQ kullan ve bunu bir optimizasyon aşamasının parçası olarak KULLANMAMAYI düşün," bu gerçekten gerekliyse "diye iyi bir argüman olabilir. Muhtemelen bazı bağlamlarda (telefon uygulamaları, vb.) Gerekli olduğunu kanıtlayabilir ... bu benim önemsiz JS bilgimin ötesinde.
mike kemirgen

105

Muhtemelen, en temiz çözüm değil, ama tek tek kaldırmaktan kesinlikle daha basit:

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

Genellikle veba gibi innertHTML'den kaçınırım. Ama bu işleri gerçekten çok daha basit hale getiriyor.
petersaints

Bunu çalıştıramadım. Neden seçim seçeneklerini bu şekilde temizlemediğinden emin değilim.
MikaelL

@MikaelL, hangi tarayıcıda olduğunu eklerseniz yararlı olur ve hatırlayabiliyorsanız sürümü.
kullanıcı

70

Bu en iyi yol:

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

Bu beni bugün kurtardı, çünkü 'for () {selectbox.remove ()}' mekanizması bir şekilde tüm seçenekleri temizlemiyor. Teşekkürler.
sonlexqt

4
biraz daha kısawhile (comboBox.options.length) comboBox.remove(0);
EkriirkE


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

1
Bu çözüm benim için çalışan tek çözüm. Iceweasel 10.0.12 ve Chrome 26.
davide

16

Orijinal sorudaki sorunun bugün artık geçerli olmadığını belirtmek isterim. Ve bu çözümün daha kısa bir versiyonu var:

selectElement.length = 0;

Her iki sürümün de Firefox 52, Chrome 49, Opera 36, ​​Safari 5.1, IE 11, Edge 18, Chrome'un en yeni sürümleri, Firefox, Samsung Internet ve Android'de UC Tarayıcı, iPhone 6S, Android 4.2'de çalıştığını test ettim. 2 stok tarayıcı. Şu anda mevcut olan cihazlarla kesinlikle uyumlu olduğu sonucuna varmanın güvenli olduğunu düşünüyorum, bu yüzden bu yaklaşımı öneriyorum.


11

Bu biraz modern ve saf bir JavaScript

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


1
En hızlı kod. Test için yaklaşık 250000 seçeneği kaldırmaya çalışın
Andrej

7

ile PrototypeJS :

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

6

JQuery kullanıyorsanız ve seçme denetiminiz "DropList" kimliğine sahipse, bu şekilde seçeneklerini kaldırabilirsiniz:

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

Aslında benim için veri listesi gibi herhangi bir seçenek listesiyle çalışıyor.

Umarım yardımcı olur.


5
İyi bir cevap bundan daha fazla ayrıntı içermelidir. Okuyucunun muhtemelen jQuery demek istediğiniz hakkında hiçbir fikri olmayabilir.
Mifeet

5
@Mifeet Eğer kullanıcı JQuery'in burada ne anlama geldiğini bilmiyorsa, kariyerini değiştirmelidir
Emilio Gort

6

Bir
seçimin alt öğesi olarak - optgroup &
- options koleksiyonuna sahip olabileceğini unutmayın
.

Yani,

Yöntem 1

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

Yöntem # 2

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

Test ettim, ikisi de Chrome'da çalışıyor.
Daha basit, eski moda, yöntem # 1'i seviyorum.


1
Bu en iyi cevap. Ayrıca, zaten bir jquery referansınız varsa:$select.html('')
the_nuts

5

Deneyin

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

Veya removeChild () işlevine bakın.

Veya jQuery çerçevesini kullanıyorsanız.

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


4

Bu, seçenekleri temizlemek için kullanılabilir:

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

Geri git. Sebebi, her çıkarmadan sonra boyut küçülmesidir.

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

Umarım, bu kod size yardımcı olacaktır



2

En basit çözümler en iyisidir, bu yüzden ihtiyacınız var:

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

Öğeler ters olarak çıkarılmalıdır, aksi takdirde bir hataya neden olur. Ayrıca, nullbeklenmedik davranışlara neden olabileceğinden, sadece değerlerin ayarlanmasını önermiyorum .

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

Veya isterseniz bir işlev yapabilirsiniz:

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

Listenin tamamının kaldırılması için yanıtlama kodunun üzerinde hafif bir değişiklik yapılması gerekiyor, lütfen bu kod parçasını kontrol edin.

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

uzunluğu yenileyin ve açılır listeden tüm verileri kaldıracaktır. Umarım bu birine yardımcı olur.


Güzel bir ek - neden her seferinde tüm seçenekleri kaldırma değildi bir an için güdük.
Ralpharoo

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

0

IE'yi desteklemeniz gerekiyorsa ve seçim listenizde 100'den fazla öğe varsa, seçimi aşağıdaki gibi bir işlevle değiştirmenizi kesinlikle öneririz:

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

Select parametresi, jquery seçicisinden veya document.getElementBy çağrısından alınan öğe olmalıdır. Bunun tek dezavantajı, seçime kadar bağladığınız olayları kaybetmenizdir, ancak işlevden geri döndüğü için bunları kolayca yeniden bağlayabilirsiniz. ~ 3k öğeleri olan bir seçimle çalışıyordum ve yeni içerikle güncelleyebilmemiz için seçimi temizlemek IE9'da 4 saniye sürüyordu. Neredeyse anında bu şekilde yapıyor.


Daha fazla bilgiyi burada bulabilirsiniz: somacon.com/p542.php ve daha basit bir yol:$('#selectbox').replaceWith($('#selectbox')[0].cloneNode(false));
FDisk

0

Vanilla JavaScript için bunu yapmanın basit ve zarif bir yolu vardır:

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

-1

Bugün aynı sorunla karşı karşıya kaldım, seçim kutusunu yeniden yüklerken aşağıdaki gibi yaptım. (Düz JS'de)

        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);

        }

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.