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

2024-05-06

我正在从 MDN 网络文档学习 JavaScript。我刚刚在学习Element.querySelector() method.

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

但有一个例子与这个事实相矛盾。

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>

Here, div标签不是以下的后代p标签,这段代码仍然有效。

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


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

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


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


我上面解释的内容写在“返回值”标题下MDN - Element.querySelector() https://developer.mozilla.org/en-US/docs/Web/API/Element/querySelector

元素的整个层次结构是 匹配时考虑,包括元素集之外的那些 包括基本元素及其后代;换句话说,选择器 首先应用于整个文档,而不是baseElement,以 生成潜在元素的初始列表。结果元素 然后检查它们是否是 baseElement 的后代。这 剩余元素的第一个匹配项由 querySelector() 方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 逻辑 && 和 || JavaScript 中的运算符

    我想进一步澄清一些事情 考虑一下 var a 42 var b abc var c null a b 42 a b abc c b abc c b null 我知道对于 运算符 如果第一个操作数的测试为真 则 表达式的结果是第一个操作数 a
  • 提交后如何重置表单?

    我有一个简单的表格 假设它需要一个电子邮件地址 提交表单后 消息堆栈会通知用户其地址已成功提交 问题是 提交地址后 带有电子邮件的表单字段仍然包含用户输入的电子邮件地址 我该如何重置该字段 我必须为此使用 JavaScript 吗 谢谢 w
  • 将对象传递给jquery中的回调函数

    我最近正在开发小型聊天模块 该模块需要不断检查服务器是否有新消息 我正在向服务器发送 ajax 请求 服务器将保持连接 直到找到新消息 长轮询 Code var chatController function other variable
  • 我可以在 Express POST 请求中进行 DOM 操作吗?

    我正在使用基本的 HTML CSS 前端 目前有一个登陆页面 上面有一个表单 可将 一些数据发送到数据库 当请求完成后 它期待某种响应 在这种情况下 我正在重新渲染页面 但是 我想用某种感谢消息替换表单 以便用户知道它已正确发送 我尝试过简
  • Puppeteer 错误 错误:等待选择器超时

    目前我有一个网站 其 HTML 中有此内容 我通过检查chrome开发者工具中的元素确认了这一点 div class hdp photo carousel div class photo tile photo tile large 我直观地
  • 无需源代码即可部署网站

    我用php开发了网站 我想在没有源代码的情况下部署它 用php可以吗 我可以将网站代码转换为某种中间形式然后进行部署吗 您可以使用 Zend Guard 来编码您的代码 这样它就无法被逆向工程 http www zend com en pr
  • 大型 AngularJS 应用程序设计

    我需要关于设计具有多个复杂模块的 AngularJS 应用程序的建议 并根据用户角色在身份验证和授权后加载模块 有些用户可以访问一个简单的模块 有些用户可以访问仪表板 有些用户可以访问 2 个以上的模块 我们已经确定了许多可以在不同模块中重
  • 我可以检测焦点来源吗? (Javascript、jQuery)

    快速提问 是否可以检测焦点是来自鼠标单击还是来自焦点事件的选项卡 我想如果没有 我将不得不在同一元素上使用单击句柄来确定源 但我更喜欢通过焦点事件的方式 Thanks Gausie 可能无法 100 工作 但如果没有直接的方法 那么你不能直
  • Rails:包括外部 JavaScript

    我想使用 JavaScript 库 例如 jQuery 插件 我是否使用 Rails 资产管道 或者我应该将其包含在 javascript include tag 中 我有哪些选择以及推荐的做法是什么 您会仅在几个页面上还是在整个应用程序中
  • 如何使用startsWith过滤并获取每个对象键的值?

    我试图通过获取每个键来过滤对象checkpoint并输出其值 目前 我只能输出键而不是值 下面 我有一个简单的对象 我正在使用过滤器和startsWith 我怎样才能得到这些值呢 var data practicals 0 checkpoi
  • Gecko/Firefox 对 HTML5 通知的支持

    我想知道是否有任何内置支持HTML5 通知到目前为止 Gecko 浏览器有哪些功能 也许有一些隐藏的开发人员 我知道 WebKitwindow webkitNotifications效果很好 那么 有 Firefox 实现吗 Update
  • WebRTC、getDisplayMedia() 不捕获远程流中的声音

    我有一个自己的网络应用程序 它基于peerjs库 它是一个视频会议 我正在尝试使用 MediaRecorder 进行录制 但我遇到了一个非常不愉快的情况 捕获我的桌面流的代码如下 let chooseScreen document quer
  • JavaScript 数组中的空项和未定义项有什么区别? [复制]

    这个问题在这里已经有答案了 考虑以下 JavaScript 代码 在节点 REPL 中 gt let a new Array 10 undefined gt a lt 10 empty items gt gt a map e gt 1 lt
  • 传单地图显示为灰色

    我正在启动 leaflet js快速开始 http leafletjs com examples quick start html但我的地图显示为灰色 我缺少什么吗 脚本 js var leafletMap L map leafletMap
  • Javascript onclick隐藏div

    我想使用 javascript 隐藏这个警告 div 我的 javascript 正确吗 我想在单击关闭图标时隐藏 关闭 div images close icon gif div strong Warning strong These a
  • 解析器阻塞与渲染阻塞

    我一直在阅读有关优化网络性能的 Google 开发人员文档 我对那里使用的术语有点困惑 CSS 和 JavaScript 文件都会阻止 DOM 构建 但是 CSS 被称为渲染阻塞 而 JavaScript 被称为解析器阻塞 解析器阻塞 和
  • 添加 sigma.js 导航按钮

    我是 javascript 和 sigma js 的新手 我试图让导航按钮在画布中向上 向下 向左 向右滚动 就像发现的那样here http jcml fr jacomyal osdc2012 demo 到目前为止 我有一个简单的例子 我
  • 为什么 useState 会导致组件在每次更新时渲染两次?

    我这里有一段简单的代码 import React useState from react import styles css export default function App const number setNumber useSta
  • RegisterClientScriptCode 在部分回发后不起作用

    以下代码行位于 SharePoint 网站的用户控件中 ScriptManager RegisterClientScriptBlock this this GetType jquery144 false ScriptManager Regi
  • 与桌面浏览器相比,移动浏览器有多强大? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐