javascript高级选择器querySelector和querySelectorAll区别

本文介绍了W3C Selectors API规范中的querySelector和querySelectorAll方法,这两种方法能够根据CSS选择器快速定位文档中的指定元素。文章通过示例展示了两种方法的区别:querySelector返回第一个匹配的元素,而querySelectorAll则返回所有匹配的元素。

querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的。他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素。

目前几乎主流浏览器均支持了他们。包括 IE8(含) 以上版本、 Firefox、 Chrome、Safari、Opera。

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <div id="bluemeng">
    <p>蓝梦博客</p>
  	<a href="http://www.bluemeng.com/">蓝梦博客</a>
  	<a href="http://www.bluemeng.com/">蓝梦博客</a>
  	<a href="http://www.bluemeng.com/">蓝梦博客</a>
  </div>
<script>
window.onload=function(){
  var d1 = document.getElementById('bluemeng');
  var obj1 = d1.querySelector('a');
  var obj11 = d1.querySelector('a');
  var obj2 = d1.querySelectorAll('a');
  console.log(obj1);//<p>蓝梦博客</p>
  console.log(obj1.length);//undefind
  console.log(obj11);//<a href="http://www.bluemeng.com/">蓝梦博客</a>
  console.log(obj2.length);//3
}

</script>
</body>
</html>
总结:

(1)querySelector 在文档内找符合选择器描述的节点第一个。

(2)querySelectorAll 在文档内找全部符合选择器描述的节点包括Element本身。


### JavaScript 中 `querySelector` `querySelectorAll` 的区别及使用场景 #### 方法定义与功能差异 `querySelector` 是用于选取文档中第一个匹配指定 CSS 选择器的元素[^1]。如果未找到任何匹配项,则返回 `null`。而 `querySelectorAll` 则会返回所有匹配指定 CSS 选择器的元素列表,作为一个静态的 `NodeList` 对象[^2]。 #### 返回值类型对比 - **`querySelector`**: 只返回单个 DOM 节点(即第一个匹配到的节点)。如果没有找到符合条件的节点,则返回 `null`。 - **`querySelectorAll`**: 返回一个包含所有匹配节点的静态 `NodeList` 集合。即使没有任何匹配的结果,它也会返回一个空的 `NodeList`,而不是 `null`[^2]。 #### 动态更新行为 当涉及到 DOM 更新时,两者的处理方式有所不同: - 如果通过 `getElementsByClassName` 获取的是动态集合 (`HTMLCollection`),那么该集合会在 DOM 发生变化时自动更新其内容。 - 然而由 `querySelectorAll` 得来的 `NodeList` 却是一个静态快照,在创建之后不会随实际 DOM 结构的变化而改变。 #### 性能考量 由于 `querySelectorAll` 提供了一个不可变的视图给开发者操作,因此在某些情况下可能更高效一些;因为它不需要持续跟踪底层数据结构中的变动情况来保持同步状态。但是具体性能表现还取决于浏览器实现以及查询复杂度等因素。 #### 应用场景分析 - 当只需要定位某个特定唯一组件或者仅关心首次出现的目标实例时候可以优先考虑采用 `querySelector` 来简化逻辑流程并减少不必要的计算开销; - 若目标是要遍历一组具有相同特征属性的对象集合作进一步批量修改样式或其他交互动作的话,则更适合运用 `querySelectorAll` 实现一次性收集所需资源再统一执行后续步骤[^1]。 ```javascript // 使用 querySelector 查找首个 .example 类型元素 const firstExampleElement = document.querySelector('.example'); if (firstExampleElement) { console.log('Found the first example element:', firstExampleElement); } else { console.error('No elements with class "example" were found.'); } // 使用 querySelectorAll 获取所有 .item 元素组成的 NodeList const allItemElements = document.querySelectorAll('.item'); allItemElements.forEach((element, index) => { console.log(`Processing item at position ${index}:`, element); }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值