Javascript 简明教程
JavaScript - DOM Node Lists
DOM Node Lists
Node lists 类似于包含 HTML 元素的数组或 HTML collection 。但是,它与数组或 HTML 集合不同。
当您使用 querySelectorAll() 方法和 childNodes 属性时,所有现代浏览器都会返回节点列表。
您可以将 NodeList 作为数组遍历,但不能在节点列表中使用其他数组方法,例如 map()、filter() 等。
Using the forEach() method to traverse the node list elements
在下面的程序中,我们定义了四个 <p> 元素,包含各种语言。
在那之后,我们使用 querySelectorAll() 方法在节点列表中获取元素,其中有等于“lang”的类名。在那之后,我们使用 forEach() 方法遍历节点列表并打印各元素的 HTML。
<DOCTYPE html>
<html>
<body>
<p class = "lang"> English </p>
<p class = "lang"> German </p>
<p class = "lang"> Arabic </p>
<p class = "lang"> Hindi </p> <br>
<div id = "output"> </div>
<script>
const output = document.getElementById('output');
output.innerHTML += "All languages are: <br>";
const langs = document.querySelectorAll('.lang');
langs.forEach((language) => {
output.innerHTML += language.innerHTML + '<br>';
})
</script>
</body>
</html>
Example: Getting the length of the node list
在下面的代码中,我们使用节点列表的“length”属性来计算节点列表中的节点数。
<DOCTYPE html>
<html>
<body>
<div class = "fruit"> Apple </div>
<div class = "fruit"> Orange </div>
<div class = "fruit"> Banana </div>
<div class = "fruit"> Mango </div>
<div id = "output">Total number of fruits are : </div>
<script>
const fruits = document.querySelectorAll('.fruit');
document.getElementById('output').innerHTML += fruits.length;
</script>
</body>
</html>
Difference between HTMLCollection and NodeList
HTML 集合和节点列表看起来很相似,但它们之间有一个细微的差别,这一点我们在下表中已经进行了说明。
Feature |
HTMLCollection |
NodeList |
Return by |
一般来说,getElementByClassName()、getElementByTagName 方法和子属性会返回 HTML 集合。 |
一般来说,querySelectorAll() 方法和 childNodes 属性会返回节点列表。 |
Array methods |
它支持有限的数组方法。 |
它还支持有限的数组方法,例如 forEach()。 |
Live collection |
一些浏览器支持在 HTML 集合中实时收集。 |
如果您更新 DOM 元素,则它将更新。 |