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

Kir*_*irt 129 javascript html-select

我的代码在IE中工作但在Safari,Firefox和Opera中断.(大惊喜)

document.getElementById("DropList").options.length=0;
Run Code Online (Sandbox Code Playgroud)

搜索之后,我了解到length=0它不喜欢它.
我试着...options=nullvar clear=0; ...length=clear具有相同的结果.

我一次对多个对象这样做,所以我正在寻找一些轻量级的JS代码.

Fab*_*ano 267

要删除select html对象的选项,可以使用以下代码:

function removeOptions(selectbox)
{
    var i;
    for(i = selectbox.options.length - 1 ; i >= 0 ; i--)
    {
        selectbox.remove(i);
    }
}
//using the function:
removeOptions(document.getElementById("mySelectObject"));
Run Code Online (Sandbox Code Playgroud)

这适用于所有浏览器.=)

  • 为@Fabiano欢呼,这实际上删除了项目而不是其他建议. (9认同)
  • 是的,它会失败,因为remove()方法将重新排列数组.向后执行将保证要删除的元素将存在. (4认同)
  • 这里的关键是selectbox.options的向后遍历我想......当我尝试转发遍历时,这个解决方案失败了 (3认同)
  • 简单的代码是while(selectEl.options.length)selectEl.options.remove(0) (2认同)

Kan*_*kan 112

如果你想拥有一个轻量级脚本,那么去jQuery吧.在jQuery中,删除所有选项的解决方案如下:

$("#droplist").empty();
Run Code Online (Sandbox Code Playgroud)

  • 我认为当`for(a在select.options中){select.options.remove(0);时,添加jQuery的行为与"轻量级"相反.这工作做得很好. (43认同)
  • 最佳答案简短明了 (7认同)
  • 这取决于具体情况.在一个Web应用程序中,可读性为一百行`$("#droplist").empty();`类型代码与成千上万行的vanilla JS相比,值得添加jQuery.如果我们正在谈论简单网页的标记/化妆品,那么你是100%正确的. (4认同)
  • @AdamIngmansson当人们诋毁JQuery的使用时,我发现它令人费解.我假设JQ背后的工程师已经做了各种各样的测试来找到最好,最快和最可靠的做某个(实用)任务的方法,我会使用这样的方法.JQ(或任何好的库)的要点是承担世俗的任务,这样你就可以专注于有趣的事情. (2认同)
  • @mikerodent我毫不怀疑该函数本身具有最高的质量和性能。但是仅为该小功能加载一个86kb(3.2.1版的压缩库)文件不是“轻量级的” :)当然,如果您使用了许多其他功能,则使用jQuery是值得的。这是一个很好的图书馆 (2认同)
  • @AdamIngmansson 够公平的!但我想您知道 JQ min.js 文件使用得如此频繁,它经常在浏览器的缓存中找到。在某种程度上,可能有一个很好的论据说“始终使用 JQ 并考虑不将其用作优化阶段的一部分,如果这确实证明有必要”。在某些情况下(手机应用程序等),它可能确实是必要的……这超出了我微薄的 JS 知识范围。 (2认同)

Dmi*_*kov 93

可能不是最干净的解决方案,但它绝对比逐个删除更简单:

document.getElementById("DropList").innerHTML = "";
Run Code Online (Sandbox Code Playgroud)


Rod*_*ngo 68

这是最好的方法:

function (comboBox) {
    while (comboBox.options.length > 0) {                
        comboBox.remove(0);
    }        
}
Run Code Online (Sandbox Code Playgroud)

  • 稍微缩短为`while(comboBox.options.length)comboBox.remove(0);` (4认同)

Fir*_*n26 27

这是最短的方式:

document.getElementById('mySelect').innerText = null
Run Code Online (Sandbox Code Playgroud)

一行,没有,没有JQuery,简单.


Nic*_*ver 21

您可以使用以下内容清除所有元素.注意

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = 0; i < length; i++) {
  select.options[i] = null;
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎是一个坏主意 - 将项目设置为null与删除它们不同. (37认同)
  • 检查其他答案以获得更好的方法. (18认同)
  • MooTools也有`empty()`,所以你会做`$("DropList").empty();` (13认同)
  • 它也不会像预期的那样工作.当我使用该代码时,它会在下拉列表中留下一个对象. (9认同)
  • 此代码可能会崩溃.反向运行循环的最安全方法. (9认同)
  • 这是一个错误的实施,不应该是答案.因为要清除数组,所以循环应该从(length-1)运行到0. (7认同)
  • 对,它应该是:for(i = length-1; i> = 0; i--){ (3认同)
  • 这个答案是对的.我没有考虑就使用它,并注意到选择框没有清空.只有一半.再次打电话.再次只有一半.我试图发布一个编辑来纠正代码,但它被拒绝了.这个答案是对的.该怎么办? (2认同)

Jul*_*cia 14

function removeOptions(obj) {
    while (obj.options.length) {
        obj.remove(0);
    }
}
Run Code Online (Sandbox Code Playgroud)


a_r*_*hah 8

这是一个现代和纯粹的JavaScript

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

  • 为什么要在 select 中插入 250000 个选项? (13认同)
  • 最快的代码。为了进行测试,尝试删除大约 250000 个选项 (2认同)

Epo*_*okK 6

使用PrototypeJS:

$('yourSelect').select('option').invoke('remove');
Run Code Online (Sandbox Code Playgroud)


nor*_*tos 6

如果您使用的是JQuery并且您的select控件具有ID"DropList",则可以通过以下方式删除其选项:

$('#DropList option').remove();
Run Code Online (Sandbox Code Playgroud)

实际上它适用于我的任何选项列表,如datalist.

希望能帮助到你.

  • 一个好的答案应包含更多细节.读者可能不知道你可能意味着jQuery. (5认同)
  • @Mifeet如果用户不知道JQuery在这里意味着什么,他/她应该改变职业生涯 (5认同)

Man*_*ddy 6

请注意,select可以将
- optgroup&
- 选项集合
作为其子项.

所以,

方法#1

var selectElement = document.getElementById('myselectid');
selectElement.innerHTML = '';
Run Code Online (Sandbox Code Playgroud)

方法#2

var selectElement = document.getElementById('myselectid');
selectElement.textContent = '';
Run Code Online (Sandbox Code Playgroud)

我测试过,都在Chrome上运行.
我喜欢简单的,老式的方法#1.


use*_*ser 6

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

selectElement.length = 0;
Run Code Online (Sandbox Code Playgroud)

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


Raz*_*orm 5

尝试

document.getElementsByTagName("Option").length=0
Run Code Online (Sandbox Code Playgroud)

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

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

$("DropList Option").each(function(){$(this).remove();});
Run Code Online (Sandbox Code Playgroud)


小智 5

使用 JQuery 是一种更漂亮、更短、更智能的方法!

$('#selection_box_id').empty();
Run Code Online (Sandbox Code Playgroud)


Pio*_*otr 5

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

for(var o of document.querySelectorAll('#DropList > option')) {
  o.remove()
}
Run Code Online (Sandbox Code Playgroud)