Javascript 简单JS用于循环混淆

Javascript 简单JS用于循环混淆,javascript,for-loop,Javascript,For Loop,在这个例子中,我想删除所有的paragraph。但正如您所看到的,下面的for循环并没有将它们全部删除,它仍然为我保留了第一段。 article=document.getElementsByTagName(“article”)[0]; 对于(i=0;i这是因为 .CalthNoos集合每次删除都会更新。因此,代码>长度在每次迭代中都在缩小,而代码正在增长。因为您正在删除。LaSTHORKS < /COD>,您最终会在中间相遇,所以上半部分不会被删除。 当您硬编码原始长度时,就消除了问题 如果您

在这个例子中,我想删除所有的paragraph。但正如您所看到的,下面的for循环并没有将它们全部删除,它仍然为我保留了第一段。

article=document.getElementsByTagName(“article”)[0];

对于(i=0;i这是因为<代码> .CalthNoos集合每次删除都会更新。因此,<>代码>长度在每次迭代中都在缩小,而<>代码正在增长。因为您正在删除<代码>。LaSTHORKS < /COD>,您最终会在中间相遇,所以上半部分不会被删除。

当您硬编码原始长度时,就消除了问题

如果您的目的是删除所有子项,那么只需检查条件以查看是否存在
.lastChild

while (article.lastChild) {
    article.removeChild(article.lastChild);
}

“生活”像这样的节点列表可能很棘手,因此在循环中修改它们的元素时总是需要小心。

这是因为
.childNodes
集合会随着每次删除而更新。因此
.length
在每次迭代中都在缩小,而
i
则在增长。因为您正在删除
.lastChild
,所以最后会在中间开会,所以上半场不会被删除。

当您硬编码原始长度时,就消除了问题

如果您的目的是删除所有子项,那么只需检查条件以查看是否存在
.lastChild

while (article.lastChild) {
    article.removeChild(article.lastChild);
}

“生活”像这样的节点列表可能是棘手的,所以在修改循环中的元素时总是需要小心。

这是因为您正在改变正在循环的集合。从零开始向上循环,同时移除子节点,使得循环的上限越低。r循环计数器将减少子节点的数量,循环结束

要使该循环工作,您需要保留子节点的初始数量:

var cnt = article.childNodes.length;
for (i = 0; i < cnt; i++) {
  article.removeChild(article.lastChild);
}

这是因为你正在改变你正在循环的集合。你正在从零开始向上循环,同时你正在移除子节点,使得循环的上限越来越低。在中间,你的循环计数器将减少孩子节点的收缩数量,并且循环结束。

要使该循环工作,您需要保留子节点的初始数量:

var cnt = article.childNodes.length;
for (i = 0; i < cnt; i++) {
  article.removeChild(article.lastChild);
}

在节点列表上迭代时,反向执行:在节点列表上迭代时,反向执行: