Javascript HTML JS仅删除了选择列表的一半?
这很奇怪,我正试图清除我的选择列表,而正是一半被清除,而不是全部。它还包括其他遗留下来的物品。我没有在这里包括数据,只是选择列表的设置。数据为10项,仅删除了5项。UniList调用DeleteAll。第一个警报打印“10”,第二个打印“5” DID只是document.getelementbyid()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尝试从选择列表的末尾循环到开头。
函数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;
}