由于某些原因,我的一个循环从无序列表中每隔一次离开一次列表项,而不是删除每个列表项。我很困惑这是为什么。
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Debugging</title>
<script>
function testingTesting() {
var itemList = document.getElementsByTagName('LI');
document.getElementById('demo').innerHTML = itemList.length;
for (i = 0; i < itemList.length; i++) {
document.getElementById('skillList').removeChild(itemList[i]);
}
}
</script>
</head>
<body>
<div id="toDisplay">
<h2>Heading for Reasons</h2>
<ul id="skillList">
<li>Alpha</li>
<li>Bravo</li>
<li>Charlie</li>
<li>Delta</li>
<li>Foxtrot</li>
<li>Exxon</li>
</ul>
<p id="demo"> </p>
</div>
<input type="button" value="Sort!" onclick="testingTesting()">
</body>
</html>单击一次排序按钮(在Chrome和Opera中)的结果是:
“寻找理由”
Bravo Delta埃克森6“
当点击两次时,结果是:
“寻找理由”
增量3“
有人知道为什么模2n +1的itemList数组中的列表项被跳过吗?
谢谢。
发布于 2017-12-07 00:39:42
这是因为当您删除一个项目时,下一个项目的索引以及总计数都会发生变化。不要使用增量器。试着这样做:
function testingTesting() {
while (document.getElementsByTagName('LI').length > 0) {
document.getElementById('skillList').removeChild(document.getElementsByTagName('LI')[0]);
}
} 发布于 2017-12-07 00:37:09
您正在从您正在迭代的容器中删除项。
如果您删除一个项目,请取消i的增量。
发布于 2017-12-07 00:41:47
当你开始的时候,你循环遍历这个数组(伪代码)
[Alpha,Bravo,Charlie,Delta,Foxtrot,Exxon]然后执行
removeChild(itemList[0])所以你的数组是:
[Bravo,Charlie,Delta,Foxtrot,Exxon]现在,您可以继续执行:
removeChild(itemList[1])因此您删除了Charlie元素(数组的元素1)。结果是:
[Bravo,Delta,Foxtrot,Exxon]最终结果将是:
[Bravo,Delta,Exxon]第二次单击时,过程是相同的。
https://stackoverflow.com/questions/47679184
复制相似问题