javascript - 为什么我可以通过一些 NodeList 而不是所有的 forEach?
问题描述
当我在这个网站上回答问题时,我开始使用.forEach()
更多。我也开始使用document.getElementsByClassName()
,或者document.querySelectorAll()
更多。
我最近注意到有时.forEach()
有效,有时无效。经过一番研究,我发现您无法.forEach()
通过NodeList
. 然后我去了这个答案,发现你可以.forEach()
在 NodeList 上。
注意:我还在下面添加了 2 个片段,其中.forEach()
有效,无效。它似乎适用于document.querySelectorAll()
但不适用document.getElementsByClassName()
,但为什么呢?他们不都返回一个NodeList
吗?
TL;DR:为什么我可以.forEach()
在一些NodeLists
,但不是全部?
.forEach()
在这个片段上工作。
let text = document.querySelectorAll(".text");
console.log(typeof text);
text.forEach(e => {
console.log(e);
});
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
.forEach()
不适用于此代码段。
let text = document.getElementsByClassName("text");
console.log(typeof text);
text.forEach(e => {
console.log(e);
});
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
解决方案
这是因为querySelectorAll
返回 a NodeList
,但getElementsByClassName
返回 a HTMLCollection
:
let querySelector = document.querySelectorAll(".text");
let className = document.getElementsByClassName("text");
console.log(querySelector.constructor.name);
console.log(className.constructor.name);
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
您必须先将 a 转换HTMLCollection
为数组,然后才能对其进行迭代:
let text = Array.from(document.getElementsByClassName("text"));
text.forEach(e => {
console.log(e);
});
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
<div class="text">Text</div>
推荐阅读
- c# - 任务模块显示具有 validDomain 的空白团队
- uwp - 使用 AppCenter 构建 Xamarin UWP 失败并出现错误“未找到 PathtoPublish”
- python - Python 串行 Readline() 与 Readlines()
- python - 如何增加字符串的数字部分?
- java - 设置具有多个 (8) 预测变量的负二项式 GLMM
- amazon-web-services - 如何在 Amazon QuickSight 中创建一个计算字段,其中包含另一个字段的最近日期?
- sql - SQL QUERY 显示自过去 6 个月以来没有任何类型交易的用户列表
- runtime-error - OptaPlanner 示例不起作用并给出错误
- c++ - 将子目录作为库添加到 CMakeLists.txt
- r - 无法在 Linux Mint 19.1 Tessa 上安装 R 4.0