【发布时间】:2020-02-02 22:05:24
【问题描述】:
一个简单的.forEach() 在第一次迭代后停止,具体取决于内容...
我的初始循环如下所示:
document.getElementsByClassName("app-form-to-js").forEach(function(node) {
node.classList.remove("app-form-to-js");
jsForms[node.id]=node.cloneNode(true);
node.remove();
});
当第一个循环发生时,它并没有超出。
然后,经过一些调整,我设法让循环使用这段代码:
document.getElementsByClassName("app-form-to-js").forEach(function(node) {
jsForms[node.id]=node.cloneNode(true);
jsForms[node.id].classList.remove("app-form-to-js");
});
但是,当我在循环中使用 node.classList.remove("app-form-to-js"); 或 node.remove(); 时,
它总是在第一次迭代后停止。
如果我改变节点,为什么循环在第一次迭代后停止(所以它至少迭代一次)?
【问题讨论】:
-
document.getElementsByClassName返回元素的实时集合。这实际上意味着它会随着您对 DOM 元素的变异而改变。您可能希望复制元素集合然后对其进行迭代。 -
document.getElementsByClassName(...).forEach is not a function? -
document.getElementsByClassName不包含forEach函数... -
尝试使用两个单独的 forEach 1. 用于 cloneNode,2nd 用于删除类
-
@Preciel 突变肯定是一个问题(或至少其中一个):
node.classList.remove("app-form-to-js");执行此操作后 - 当前节点从列表中删除,所有其他节点移动,并且下一个迭代步骤跳过下一个节点(因为它的索引移动了)。
标签: javascript loops