我的代码可以在IE中运行,但在Safari、Firefox和Opera中会崩溃。(惊喜)

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

经过搜索,我了解到它不喜欢的是长度=0。 我试过了……选项=null和var clear=0...长度=clear,结果相同。

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


当前回答

也许,这不是最干净的解决方案,但绝对比一个一个地移除简单:

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

其他回答

function removeOptions(obj) {
    while (obj.options.length) {
        obj.remove(0);
    }
}
for (var opt of document.querySelectorAll('#DropList option'))
{ 
  opt.remove();
}

这个解决方案也适用于optgroups。

我想指出的是,最初问题中的问题在今天已经没有意义了。还有一个更简短的解决方案:

selectElement.length = 0;

我测试过,这两个版本都可以在Firefox 52、Chrome 49、Opera 36、Safari 5.1、IE 11、Edge 18、最新版本的Chrome、Firefox、三星互联网和UC浏览器(Android)、Safari (iPhone 6S)和Android 4.2.2常规浏览器上运行。我认为可以肯定地说,它与目前的任何设备都是完全兼容的,所以我推荐这种方法。

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

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

以上答案的代码需要轻微更改以删除列表完整,请检查这段代码。

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

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