javascript - 为什么 document.querySelector 返回一个 Element 而 document.querySelectorAll 返回一个 NodeList
问题描述
文档说document.querySelector
return an Element
whiledocument.querySelectorAll
返回 a NodeList
。为什么会有这种差异?为什么要document.querySelectorAll
返回一个Element
数组?
注意:标记为重复的问题没有回答我的问题,即为什么document.querySelectorAll
不返回Element
数组?document.querySelector
在与返回“元素”相同的行上。前者只是后者的复数形式。
解决方案
对于document.querySelectorAll(),在 MDN 上,它是这样说的:
[it] 返回一个静态(非实时)NodeList,表示文档元素的列表
因此,NodeList确实包含一个元素列表。之所以将这种特定的数据结构称为“NodeList”而不仅仅是“ElementList”,是因为它可以包含除元素之外的其他类型的节点(例如注释节点、文本节点或片段节点)。document.querySelectorAll()
只会返回一个包含元素的 NodeList,但其他函数/属性(例如.childNodes 属性)可能会生成带有其他类型节点的节点列表。
nodeList 有一个数组没有的特殊属性,即 nodeList 可以是“实时的”,这意味着它会在 DOM 发生更改时自动更新。但是,这不适用于 document.querySelectorAll(),因为 querySelectorAll() 将始终返回非活动节点列表。据我所知,他们本可以简单地返回一个元素数组,但可能选择返回一个 nodeList 以保持他们的浏览器 API 彼此一致。也许他们可以对 nodeList 数据结构进行某些隐藏的优化。
推荐阅读
- php - PHP:如何动态创建变量
- java - 如何使用 Java 驱动程序对 mongo db 中嵌套 HashMap 的值求和
- python - 当您知道 URL 的一部分时,在 Python 中抓取图像及其替代文本
- django - Django REST 在 DELETE 方法上给出 403 禁止,但不是 POST
- node.js - 如何在 mongoDB 中减去 2 个操作?
- loopback4 - 用于测试的环回更改存储库数据源
- sql-server - 日期范围之间的 7 天平均值
- javascript - 如何将每个 scss 文件编译到自己的文件夹中而不将它们合并到一个文件夹中?
- javascript - 404 错误,在 webcomponent 单元测试期间找不到 html
- java - 从 Google 更改后,当我在 Google Play 上发布应用程序时,许多设备不支持 xWalkWebView 64 位