[J框架知识扫盲]之querySelectorAll的应用2

本文介绍了HTML5中querySelectorAll方法的基本用法及其强大的选择器功能。通过此方法,开发者可以方便地选取页面中的元素进行操作,极大地提高了前端开发效率。

随着Jquery对dom的编程的便利,HTML5也慢慢融入了对dom的编程的扩展。querySelectorAll就是一个很好的例子.

 

Document.querySelectorAll

返回当前文档中匹配一个特定选择器的所有的元素(使用depth-first pre-order这样的规则遍历所有文档节点) .返回的对象类型是 NodeList.

语法:

elementList = baseElement.querySelectorAll(selectors);

 其中

elementList会是一个non-live的NodeList对象.

baseElement是一个元素对象.

selectors是一个由逗号连接的包含一个或多个CSS选择器的字符串.

selectors的规法:

  • "#id" :获取含有id="id"的元素
  • ".css":获取class属性包含“css”的所有元素
  • “tag”:获取tagName为"tag"的所有元素
  • "[attr='value']":获取元素含有attr属性的所有元素,如果加上"=value",则表示获取元素含有attr属性且此元素的值需为value,更多:[name*="value"] 包含, [name$="value"]结尾,[name^="value"]开头
  • parent child 获取包含child的所有元素,parent > child  只获取第一层。parent > child > child获取第二层,以此类推。

 

tag和css可以接合使用,如:"div.red",表示所有class属性包含red的所有div元素

 

英文版本:http://openxtiger.iteye.com/blog/1611723

### 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、付费专栏及课程。

余额充值