javascript - 在 mdn web 文档中 Element.querySelector 方法说它应该是后代,但示例显示不然

标签 javascript html queryselector

我正在从 MDN 网络文档学习 JavaScript。我正在研究 Element.querySelector() 方法。

据记载,它返回第一个元素,该元素是调用它的元素的后代,并且与指定的选择器组匹配。

但是给出的例子与这个事实相矛盾。

var baseElement = document.querySelector("p");
document.getElementById("output").innerHTML =
  (baseElement.querySelector("div span").innerHTML);
<div>
  <h5>Original content</h5>
  <p>
    inside paragraph
    <span>inside span</span>
    inside paragraph
  </p>
</div>
<div>
  <h5>Output</h5>
  <div id="output"></div>
</div>

此处,div 标记不是 p 标记的后代,但此代码仍然有效。

你能指出我哪里出错了吗?

最佳答案

Element.querySelector() 首先将传递给 .querySelector() 方法的 CSS 选择器应用于整个文档不是调用 .querySelector() 的基本元素。这样做是为了生成初始的潜在元素集。

生成初始潜在元素集后,将过滤潜在元素列表以仅保留作为基本元素后代的那些元素。最后,返回此过滤列表中的第一个元素。


在您的代码示例中,首先在整个文档中搜索与 div span 匹配的元素。由于整个文档中只有一个元素与 div span 选择器匹配,因此初始的一组潜在元素仅包含一个 span 元素。之后,检查此 span 元素以查看它是否是 baseElement 的后代。因为在这种情况下,它是 baseElement,它被返回。


我上面解释的内容写在MDN - Element.querySelector()中的“返回值”标题下。

The entire hierarchy of elements is considered when matching, including those outside the set of elements including baseElement and its descendants; in other words, selectors is first applied to the whole document, not the baseElement, to generate an initial list of potential elements. The resulting elements are then examined to see if they are descendants of baseElement. The first match of those remaining elements is returned by the querySelector() method.

关于javascript - 在 mdn web 文档中 Element.querySelector 方法说它应该是后代,但示例显示不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62873962/

相关文章:

javascript - window.open() 适用于 html 文件,但不适用于 php 文件

html - 为什么是 HTML 十进制和 HTML 十六进制?

javascript - 如何为根节点的直接子节点创建选择器?

javascript - cheeriojs 迭代 xml 响应

javascript - 图像源 uri 内的 if 语句 - React Native

javascript - Javascript/垃圾收集器中的循环引用

javascript - 为旧版本的非 IE 浏览器编写兼容代码

html - 纯 CSS 旋转动画在无限循环中损坏

jquery - 将事件绑定(bind)到 iframe 的内容并从 iframe 触发它

javascript - querySelector 到带有函数参数的 addEventListener