Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML JS仅删除了选择列表的一半?_Javascript_Html - Fatal编程技术网

Javascript HTML JS仅删除了选择列表的一半?

Javascript HTML JS仅删除了选择列表的一半?,javascript,html,Javascript,Html,这很奇怪,我正试图清除我的选择列表,而正是一半被清除,而不是全部。它还包括其他遗留下来的物品。我没有在这里包括数据,只是选择列表的设置。数据为10项,仅删除了5项。UniList调用DeleteAll。第一个警报打印“10”,第二个打印“5” DID只是document.getelementbyid() 函数DeleteAll(字符串){ var i; var list=DID(字符串); 警报(DID(字符串).options.length); 对于(i=0;i尝试从选择列表的末尾循环到开头。

这很奇怪,我正试图清除我的选择列表,而正是一半被清除,而不是全部。它还包括其他遗留下来的物品。我没有在这里包括数据,只是选择列表的设置。数据为10项,仅删除了5项。UniList调用DeleteAll。第一个警报打印“10”,第二个打印“5”

DID只是document.getelementbyid()

函数DeleteAll(字符串){
var i;
var list=DID(字符串);
警报(DID(字符串).options.length);

对于(i=0;i尝试从选择列表的末尾循环到开头。UI怀疑当您删除它们时,它正在重新排序数组,这样一旦删除了一半,下一个索引就会超过顶部。例如,如果您有10个项目,那么在删除5个项目后,它将尝试删除索引为6的项目,但您的列表长度只有5,因此不会超过顶部工作

因此,请尝试:

   for (i = list.options.length-1 ; i>=0; i--) {
       list[i] = null;
   }
我想我的索引是正确的,但是如果我弄错了,可以相应地调整循环

编辑:

我意识到还有一种更好的删除方法。只需使用list.options.length=0即可清除列表。我将一些示例放入JSFIDLE中,以便您可以看到它们的实际操作(因此我可以测试它们是否有效)


-第一个按钮运行您的方法(您将看到它删除所有其他条目),第二个按钮运行我的修改循环,您可以看到它将所有条目都删除。“最佳”按钮只是将列表长度设置为0.:)

列表。选项是一个假定为:

注意:HTML DOM中的集合被假定为活动的,这意味着当基础文档发生更改时,它们会自动更新

因此,每次迭代都会删除一项,并更新文档,从而更新
list.options
,从而更新
list.options.length
。因此,不是删除列表的第一、第二、第三等选项,而是删除第一、第三、第五等选项

使用
list.options[0]
始终删除第一个选项:

while (list.options.length > 0) {
    list.options[0] = null;
}
或从后面删除选项:

for (i = list.options.length-1; i>=0; i--) {
    list.options[i] = null;
}
顺便说一句:具有通过其索引删除选项的功能:

while (list.length > 0) {
    list.remove(0);
}

您可以将现有的
DeleteAll
函数替换为

function DeleteAll(listId) {
   var list = document.getElementById(listId);
   list.options.length=0;
}
甚至

function DeleteAll(listId) {
   document.getElementById(listId).options.length=0;
}

如果您仍然喜欢使用
DID()
,您可以在中交换它,这可能也是一个选项


while(list.options.length>0)
{
列表[0]=null;
}

您在这里提供的信息不够。什么是
DID
函数?哦,很抱歉,它只调用document.getelementbyid(),我肯定得到了HTML选择对象。谢谢,列表[0]不起作用,但索引递减did@Tom:嗯,不应该是
list.options[0]
既然要删除这些选项?
function DeleteAll(listId) {
   document.getElementById(listId).options.length=0;
}