javascript - .forEach() 在第一次迭代后停止
问题描述
第一次迭代后的简单.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")
,这将返回 aNodeList
而不是HTMLCollection
推荐阅读
- elasticsearch - 按字段聚合,然后对另一个字段的值求和
- ios - 在 Xcode 10 中设计 viewcontroller 后如何添加导航控制器?
- ios - 带有 MSAL 的本机 iOS 应用程序需要第二次登录 Webview 才能到 Sharepoint Online
- android - 如何在新活动中获取通知的标题和消息并在文本视图上显示
- python - 创建能够从给定参数生成函数对象(在这种情况下为分段函数)的脚本
- mongodb - 使用 $addFields 时如何将值合并到一个数组中?
- python - numpy int64 不可迭代
- python - psycopg2:如何从 excel 文件动态创建表并将值插入 postgresql db
- java - 在 netbeans 中运行 Java 代码没有任何问题。虽然表没有出现在 Mysql Workbench
- reactjs - 在 React 和饼图中使用 setState 的多个获取请求