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节点的文本值,只 ...
随机推荐
- UVA548——Tree(中后序建树+DFS)
Tree You are to determine the value of the leaf node in a given binary tree that is the terminal nod ...
- 转:Build Your First JavaScript Library
http://net.tutsplus.com/tutorials/javascript-ajax/build-your-first-javascript-library/ Step 1: Creat ...
- Oracle10g 回收站及彻底删除table : drop table xx purge
drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 1.通过查询回收站user_recyclebin获取被删除的表信息, ...
- hdr_beg(host) hdr_reg(host) hdr_dom(host)
case 1 测试hdr_beg(host) 的情况 acl zjtest7_com hdr_beg(host) -i zjtest7.com use_backend zjtest7_com if z ...
- C语言计算程序运行时间
#include<stdio.h>#include<stdlib.h> #include "time.h" int main( void ) { ...
- Android开发之读写联系人
读写联系人需要用到android的ContentProvider 同时需要读和写联系人的权限 需要使用到联系人数据库中的 * raw_contacts表: * contact_id:联系人id * d ...
- hdu 3549 Flow Problem(增广路算法)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3549 模板题,白书上的代码... #include <iostream> #include & ...
- bzoj列表2
之前发过一次了,这里的题较水,没什么好讲的 bzoj1088 直接穷举前两位即可,话说程序员的扫雷是白玩的? bzoj1083 裸的最小生成树(最小生成树=最小瓶颈树),SCOI大丈夫(话说网上二分是 ...
- sencha touch tabsidebar 源码扩展
先上图看效果 没错,这是一个sencha touch 项目,而这里的右边推出效果(下文叫做tabsiderbar),使用插件tabsiderbar来扩展的. 插件js下载地址:http://www.m ...
- NopCommerce架构分析之一----依赖类生成容器
NopCommerce为了实现松耦合的框架设计目的,使用了IOC框架:Autofac.据有人测试,Autofac是性能好的IOC工具. 1.在IOC中,组件首先需要在IOC中注册,有通过配置文件注册的 ...