DOM 的选择器 API
在刚开始的时候,我们只能用 getElementById,getElementsByClassName,getElementsByTagName 这几个 DOM 方法查找 DOM 树中的元素。后来,在 W3C 的选择器 API 标准中[1],提供了 querySelector 和 querySelectorAll 这两个利用 CSS 选择器查找元素的方法。它们的语法如下:
element = document.querySelector(selectors);
elementList = document.querySelectorAll(selectors);
其中,document.querySelector 用于查找第一个符合 CSS 选择器条件的元素,使用深度优先,前序遍历的方法。而 document.querySlectorAll 用于查找所有符合 CSS 选择器条件的元素,返回一个静态的 NodeList 对象。注意不同的是, getElementsByClassName 和 getElementsByTagName 返回的却是一个动态的 HTMLCollection 或 NodeList 对象。也许是这个原因,选择同样的元素时,querySelector 比 getElementsByClassName 和 getElementsByTagName 要慢不少。
类似地,querySelector 和 querySelectorAll 这两个方法也可用于在某元素内部查找符合某选择器条件的子元素。此时的语法相同:
element = baseElement.querySelector(selectors);
elementList = baseElement.querySelectorAll(selectors);
这个 querySelectorAll 方法用于元素时,和 jQuery 的 $baseElement.find(selectors) 是有不同的。前者是在 document 中查找,然后过滤包含于 baseElement 的元素;而后者是直接在 baseElement 中查找元素。
这个选择器 API 标准,Firefox 3.5+,Safari 3.2+,Opera 10+,Chrome 1.0+ 都支持。而 IE 直到 8.0 版本才支持,但由于 IE 8 对大部分 CSS3 选择器都不支持,这个选择器 API 在 IE 8 中的用处就大打折扣了。到了 IE 9 才算基本完整的支持 CSS3 选择器了。
另外,选择器 API 中还有个 matchesSelector 方法,用于检测某个元素是否满足某个选择器。目前,各个主流浏览器对这个方法的支持都需要加上前缀,而且这个方法在最新的标准中已经改名为 matches 了。
参考资料:
[1] W3C - Selectors API Level 1
[2] W3C - Selectors API Level 2
[3] Document.querySelectorAll - Web API reference | MDN[4] document.querySelector - Web API reference | MDN[5] querySelectorAll method (Windows) - MSDN
[6] querySelector method (Windows) - MSDN
[7] Understanding CSS Selectors (Internet Explorer) - MSDN
[8] querySelectorAll vs getElementsByTagName · jsPerf[9] Why is getElementsByTagName() faster than querySelectorAll()?
[A] Live vs. Static Node Lists | Darcy Clarke
[B] Selectors API Test Suite - John Resig
[C] 各浏览器中querySelector和querySelectorAll的实现差异 - snandy[D] 避免将 querySelectorAll 方法与 JQuery 的选择器混淆 - w3ctech
[E] Element.mozMatchesSelector - Web API reference | MDN
[F] Can I use matches() DOM method
DOM 的选择器 API的更多相关文章
- jacascript DOM节点——节点获取与选择器API
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! DOM 操作必须等待 HTML 加载完毕之后,才可以获取节点:有两种方法: 把 script 标签放到代码 ...
- 深入理解javascript选择器API系列第三篇——h5新增的3种selector方法
× 目录 [1]方法 [2]非实时 [3]缺陷 前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuer ...
- 深入理解javascript选择器API系列第三篇——HTML5新增的3种selector方法
前面的话 尽管DOM作为API已经非常完善了,但是为了实现更多的功能,DOM仍然进行了扩展,其中一个重要的扩展就是对选择器API的扩展.人们对jQuery的称赞,很多是由于jQuery方便的元素选择器 ...
- JavaScript实现DOM对象选择器
目的: 根据传入的选择器类型选出第一个符合的DOM对象. ①可以通过id获取DOM对象,例如 $("#adom"); ②可以通过tagName获取DOM对象,例如 $(" ...
- DOM的选择器
这几天学习了DOM的选择器,现在来进行一下总结分类. 1.DOM里的元素节点选择器 元素节点选择器包括id,class,name,tagname,高级,关系. 1.1 id选择器 id:返回的是单个对 ...
- Dom直接选择器
Dom直接选择器 <!DOCTYPE html> <!--Dom间接选择器--> <html lang="en"> <head> & ...
- DOM扩展-Selectors API(选择符 API)、元素遍历
DOM扩展 对DOM的两个主要扩展是SelectorsAPI(选择符API)和HTML5 SelectorsAPI(选择符API)是由W3C发起制定的一个标准,致力于浏览器原生支持CSS查询,Sele ...
- DOM querySelector选择器
原生的强大DOM选择器querySelector 在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并 ...
- 原生JS中DOM节点相关API合集
节点属性 Node.nodeName //返回节点名称,只读 Node.nodeType //返回节点类型的常数值,只读 Node.nodeValue //返回Text或Comment节点的文本值,只 ...
随机推荐
- jqueryrotate 使用 帮助 笔记 学习
1.想变角度 $("imgID").rotate(45); 2.想变角度时,有运动过程 $("imgID").rotate({animateTo:45} ...
- Linux下执行程序出现 Text file busy 提示时的处理方式
使用 fuser xxx 命令查看xxx文件被哪个进程占用,然后关闭该进程,解决问题. # fuser xxxxxx: 2878# kill -9 2878 注:xxx是文件 ...
- 第三部分 overlay 学习
前文仅了解了overlay HAL的架构,下面继续看看系统层是如何调用Overlay模块. 1.测试代码 frameworks/base/libs/surfaceflinger/tests/overl ...
- 对于requirejs AMD模块加载的理解
个人人为使用模块化加载的优点有三: 1,以我的项目为例:90%为图表展示,使用的是echarts,此文件较大,requirejs可以在同一个版本号(urlArgs)之下缓存文件,那么我就可以在访问登陆 ...
- [CF 471C] MUH and House of Cards
C. MUH and House of Cards Polar bears Menshykov and Uslada from the zoo of St. Petersburg and elep ...
- I.MX6 Android frameworks services 文件架构
/******************************************************************************* * I.MX6 Android fra ...
- Azure HDInsight HBase DR解决方案
Sun wei Sat, Feb 28 2015 3:07 AM Apache HBase是目前非常流行的NoSQL数据库,通过HDFS+Zookeep+Master+Region Server的架 ...
- Mysql主从复制的实现
MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一 ...
- C语言块内变量回收问题
之前有一个错误认识,错误的认为局部变量的回收是发生在函数返回时.其实在块结束时块内使用的内容就会被回收了. 以下的实例说明了问题 ]; ; i < ; ++i) { int item = i; ...
- Kernel 中的 GPIO 定义和控制
最近要深一步用到GPIO口控制,写个博客记录下Kernel层的GPIO学习过程! 一.概念 General Purpose Input Output (通用输入/输出)简称为GPIO,或 总线扩展器. ...