如何清除下拉框中的所有选项?


153

我的代码可在IE中运行,但在Safari,Firefox和Opera中会中断。(大惊喜)

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

搜索之后,我了解到length=0它是不喜欢的。
我已经尝试过,...options=null并且var clear=0; ...length=clear结果相同。

我一次要对多个对象执行此操作,因此我正在寻找一些轻量级的JS代码。


销毁所有选项(!?),并在刷新页面后重新设置浏览器的选定选项历史记录,请使用HTML的 <option selected>??。(谷歌把我们放在这里,但它不在这里)...参见document.getElementById(“ form1”)。reset()实际解决方案。
彼得·克劳斯

Answers:


34

您可以使用以下内容清除所有元素。

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

14
MooTools也有empty(),所以您可以这样做$("DropList").empty();
Brian Koser 2012年

42
这似乎是一个坏主意-将项目设置为null与删除它们不同。

9
它也没有像预期的那样起作用。当我使用该代码时,它将在下拉菜单中保留一个对象。
gabrjan

9
此代码可能会崩溃。反向运行循环的最安全方法。
康坎2014年

19
检查其他答案,以获得更好的方法。
2014年

296

要删除的HTML元素的选项select,您可以使用remove()方法:

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

删除options倒退很重要;该remove()方法重新排列了options集合。这样,可以确保要删除的元素仍然存在!


9
为@Fabiano欢呼,这实际上删除了项目,而不是其他建议。
康斯坦萨

4
这里的关键是selectbox.options的向后遍历...我尝试向前遍历时此解决方案失败
scottysseus

7
是的,它将失败,因为remove()方法将重新排列数组。向后进行操作将确保要删除的元素将存在。
法比亚诺

添加selectbox.options.length = 0; 最后的定义可能使其在所有浏览器中都是完美的。
omkar sirra

4
简单的代码是同时(selectEl.options.length)selectEl.options.remove(0)
MIF

127

如果您希望拥有一个轻量级的脚本,请使用jQuery。在jQuery中,删除所有选项的解决方案如下:

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

46
我认为,当for (a in select.options) { select.options.remove(0); }工作正常时,添加jQuery的行为与“轻量级”相反。
Artog 2014年

7
这取决于上下文。在Web应用程序中,与几百行$("#droplist").empty();香草JS相比,一百行类型代码的可读性使其非常值得添加jQuery。如果我们在谈论简单网页的标记/化妆品,那么您100%正确。
Half_Duplex 2016年

3
@AdamIngmansson当人们谴责JQuery的使用时,我感到困惑。我将使用这样的方法,假设JQ背后的工程师已经进行了各种测试,以找到执行给定(实用)任务的最佳,最快,最可靠的方法。JQ(或任何不错的库)的重点是承担平凡的任务,以便您可以专注于有趣的事情。
麦克啮齿动物

2
@mikerodent我毫不怀疑该函数本身具有最高的质量和性能。但是仅为该小功能加载86kb(3.2.1版的压缩库)文件不是“轻量级的” :)当然,如果您使用了许多其他功能,则使用jQuery是值得的。这是一个很好的图书馆
Artog

1
@AdamIngmansson足够公平!但是我认为您知道JQ min.js文件的使用频率很高,因此经常在浏览器的缓存中找到它。在某种程度上,可能有一个很好的说法:“如果确实需要这样做,则始终使用JQ,并且不要将其用作优化阶段的一部分”。在某些情况下(电话应用程序等)可能确实需要这样做……这超出了我微不足道的JS知识。
麦克啮齿动物

104

可能不是最干净的解决方案,但绝对比一一删除要简单:

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

我通常避免像瘟疫一样使用innertHTML。但这使事情变得如此简单,以至于我实际上很喜欢它。
petersaints,

我无法使它正常工作。不知道为什么不这样清除选择选项。
MikaelL

@MikaelL,如果您添加它在其中运行的浏览器,则非常有用。如果您还记得它的版本,则非常有用。
用户

70

这是最好的方法:

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

今天,这为我省下了一笔钱,因为“ for(){selectbox.remove()}”机制无法以某种方式清除所有选项。谢谢。
sonlexqt

4
稍短一点while (comboBox.options.length) comboBox.remove(0);
EkriirkE

31

这是一个简短的方法:

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

一行,没有,没有JQuery,很简单。


不是最短的,请参阅下面的答案
用户


16

我想指出的是,原始问题中的问题已不再适用。该解决方案甚至有更短的版本:

selectElement.length = 0;

我已经测试了这两个版本都可以在Firefox 52,Chrome 49,Opera 36,Safari 5.1,IE 11,Edge 18,Android上的最新版本的Chrome,Firefox,三星Internet和UC浏览器,iPhone 6S上的Safari,Android 4.2上运行。 2个股票浏览器。我认为可以断定它与目前存在的任何设备绝对兼容,因此我建议使用这种方法。


11

这是一个现代的纯JavaScript

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


1
最快的代码。对于测试,请尝试删除大约250000个选项
Andrej

7

PrototypeJS

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

6

如果使用的是JQuery,并且选择控件的ID为“ DropList”,则可以通过以下方式删除其选项:

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

实际上,它适用于任何选项列表,例如数据列表。

希望能帮助到你。


5
一个好的答案应该包含比这更多的细节。读者可能不知道您可能是指jQuery。
Mifeet 2015年

5
@Mifeet如果用户不知道JQuery在这里意味着什么,他/她应该改变职业
Emilio Gort 2015年

6

请注意,一个选择可以同时
包含-optgroup和-options
集合
作为其子项。

所以,

方法1

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

方法#2

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

我测试了,两者都可以在Chrome上运行。
我喜欢更简单,更老式的方法#1。


1
这是最好的答案。另外,如果您已经有了对选择的jQuery引用:$select.html('')
the_nuts '16

5

尝试

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

或者也许看一下removeChild()函数。

或者,如果您使用jQuery框架。

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


4

这可以用来清除选项:

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
var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length; i++) {
  select.options[i].remove();
}

希望这段代码对您有帮助



2

最简单的解决方案是最好的,因此您只需要:

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

物品应反向取出,否则会导致错误。另外,我不建议您简单地将值设置为null,因为这可能会导致意外行为。

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

或者,如果您愿意,可以使其具有以下功能:

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

上面的答案的代码需要稍作更改才能删除完整列表,请检查这段代码。

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

刷新长度,它将从下拉列表中删除所有数据。希望这会帮助某人。


不错的补充-为何不能每次都删除所有选项,这让他很困惑。
Ralpharoo

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

0

如果必须支持IE,并且选择列表中有100多个项目,则强烈建议您考虑使用以下功能替换选择:

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

select参数应该是来自jquery选择器或document.getElementBy调用的元素。唯一的缺点是,您丢失了已连接到选择的事件,但是当它从函数中返回时,您可以轻松地重新附加它们。我正在使用一个约有3000个项目的选择,并且在IE9上需要4秒钟才能清除选择,因此我可以使用新内容对其进行更新。这样几乎可以立即做到。


您可以在此处找到更多信息:somacon.com/p542.php和更简单的方法:$('#selectbox').replaceWith($('#selectbox')[0].cloneNode(false));
FDisk

0

对于Vanilla JavaScript,有一种简单而优雅的方法可以做到这一点:

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

-1

今天,我遇到了同样的问题,重新加载选择框时,我做了如下操作。(在普通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);

        }

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.