NodeList

ZShuai
1 min

# NodeList

NodeList 对象是节点的集合,通常是由属性(Node.childNodes)和方法(document.querySelectorAll)返回

WARNING

  • NodeList 是一个类数组的对象。
  • 虽然不是数组,但是可以使用 forEach() 来迭代。
  • 可以使用 Array.from() 将其转换为数组。

在一些情况下,NodeList 是一个实时集合,文档中的节点树发生变化,NodeList 也会随之变化。例如,Node.childNodes 是实时的:

var parent = document.getElementById("parent");

var child_nodes = parent.childNodes;
console.log(child_nodes.length); // 我们假设结果会是“2”

parent.appendChild(document.createElement("div"));
console.log(child_nodes.length); // 但此时的输出是“3”

在其他情况下,NodeList 是一个静态集合,也就意味着随后对文档对象模型的任何改动都不会影响集合的内容。比如 document.querySelectorAll 就会返回一个静态 NodeList。

# Array.from(NodeList)

转数组

# NodeList.length

NodeList 中包含的节点个数

# NodeList.item()

返回 NodeList 对象中指定索引的节点,如果索引越界,则返回 null。

等价的写法是 nodeList[i],不过,在这种情况下,越界访问将返回 undefined。

# NodeList.entries()

let b = document.querySelectorAll(`.class1`);
for (let c of b.entries()) {
  console.log(c); // [0, div.class1]  [1, div.class1]
}

# NodeList.keys()

for (let c of b.keys()) {
  console.log(c); // 0 1
}

# NodeList.values()

for (let c of b.values()) {
  console.log(c); // div.class1  div.class1
}

# NodeList.forEach()

遍历节点

  • 遍历的方法:
// Array.forEach
Array.prototype.forEach.call(NodeList, function (node) {});

//  forEach() 与 entries()、values()、和 keys()
NodeList.forEach((node) => console.log(node));

// 经典for
for (var i = 0; i < NodeList.length; ++i) {}

WARNING

不要尝试使用 for...in 来遍历一个 NodeList 对象中的元素, NodeList 对象中的 length 和 item 属性也会被遍历出来

Last Updated: 2/10/2023, 6:53:47 AM