javascript - .forEach() 在第一次迭代后停止

标签 javascript loops

一个简单的 .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 返回一个 HTMLCollection,它没有 forEach 的定义。但是,您可以通过使用 Array.from() 将其转换为一个已定义的数组,如下所示:

var collection = Array.from(document.getElementsByClassName("app-form-to-js"));
collection.forEach(function(node){...});

编辑:

正如 @Preciel 向我指出的,NodeList对象确实有一个类似于数组的 forEach() 函数。如果您想使用它,可以将 document.getElementsByClassName("app-form-to-js") 替换为 document.querySelectorAll(".app-form-to-js") 这将返回一个 NodeList 而不是 HTMLCollection

关于javascript - .forEach() 在第一次迭代后停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60031057/

相关文章:

javascript - HTML/JS 隐藏基于另一个选定值的选择选项

javascript - Greasemonkey 有多安全?

javascript - 什么会导致复选框忽略其选中值?

c++ - 输入是如何存储的?

在有序列表中获取唯一相邻整数的 Pythonic 方法

javascript - 如何禁用 CSS 过渡、更新样式,然后使用 JavaScript 快速恢复过渡

javascript - 使用移动的 div 作为 CSS 剪辑路径

java - 将 String 转换为 Char 数组,然后仅返回数组的偶数索引

c++ - 循环遍历 C++ 类的对象

c++ - 为什么我的C++代码不接受输入?我的代码有什么问题?