DOM扩展-Selectors API(选择符 API)

DOM扩展

对DOM的两个主要扩展是SelectorsAPI(选择符API)和HTML5

SelectorsAPI(选择符API)是由W3C发起制定的一个标准,致力于浏览器原生支持CSS查询,SelectorsAPILevel 1的核心是两个方法:querySelector()querySelectorAll(),可以通过Document及Element类型的实例调用他们。

querySelector()方法接受一个CSS选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null。

1     //取得body元素
2     var body = document.querySelector(‘body‘);
3     //取得ID为"myDiv"的元素
4     var myDiv = document.querySelector(‘#myDiv‘);
5     //取得类为"selected"的第一个元素
6     var selected = document.querySelector(‘.selected‘);
7     //取得类为"button"的第一个图像元素
8     var img = document.body.querySelector(‘img.button‘);

通过Document类型调用querySelector()方法时,会在文档元素的范围内查找匹配的元素。而使用Element类型调用querySelector()方法时,会在该元素的后代元素中查找匹配的元素。

querySelectorAll(),接受的参数是一个CSS选择符,返回的是所有匹配元素而不仅仅是一个元素。这个方法返回的是一个NodeList的实例。

1     //取得某<div>中的所有<em>元素
2     var em = document.getElementById(‘myDiv‘).querySelectorAll(‘em‘);
3     //取得类为"selected"的所有元素
4     var selected = document.querySelectorAll(‘.selected‘);
5     //取得所有<p>元素中的所有<strong>元素
6     var strongs = document.querySelectorAll(‘p strong‘);

要取得返回的NodeList中的每一个元素,可以使用item()方法,也可以使用方括号语法,比如:

1     var i,len,strong;
2     for(i=0,len=strong.length;i<len;i++){
3         strong = strong[i]; //或者strong.item(i)
4         strong.chassName = ‘important‘;
5     }

matchesSelector(),接受一个参数,即CSS选择符,如果调用元素与该选择符匹配,返回true;否则,返回false。这是Selectors API Level 2 规范为Element类型新增的一个方法。

但是现在这个方法还没有得到所有浏览器的支持,所以要想使用这个方法,最好是编写一个包装函数。

 1     function matchesSelector(element,selector){
 2         if(element.matchesSelector){
 3             return element.matchesSelector(selector);
 4         }else if(element.msMatchesSelector){    //IE 9+
 5             return element.msMatchesSelector(selector);
 6         }else if(element.mozMatchesSelector){    //Firefox 3.6+
 7             return element.mozMatchesSelector(selector);
 8         }else if(element.webKitMatchesSelector){    //Safari 5+和Chrome
 9             return element.webKitMatchesSelector(selector);
10         }else {
11             throw new Error("Not supported.");
12         }
13     }
14
15     if(matchesSelector(document.body,"body.page1")){
16         //执行操作
17     }

对于元素间的空格,IE9及之间版本不会返回文本节点,而其他浏览器都会返回文本节点。这样就导致了在使用childNodes和firstChild等属性时的行为不一致。为了弥补这一差异,而同时又保持DOM规范不变,Element Traversal规范新定义了一组属性。

childElementCount:返回子元素的个数
firstElementChild:指向第一个子元素;firstChild的元素版
lastElementChild:指向最后一个子元素;lastChild的元素版
previorsElementSibling:指向前一个同辈元素;previousSibling的元素版
nextElementSibling:指向后一个同辈元素;nextSibling的元素版

利用这些元素不必担心空白文本节点,从而可以更方便的查找DOM元素了。

过去,要跨浏览器遍历某个元素的所有子元素,需要下面这样写代码

1     var i,
2         len,
3         child = element.firstChild;
4     while(child != element.lastChild){
5         if(child.nodeType == 1){
6             processChlid(child);
7         }
8         child = child.nextSibling;
9     }

而使用Element Traversal新增的元素,代码会更简洁。

1     var i,
2         len,
3         child = element,firstElementChild;
4     while(child != element.lastElementChild){
5         processChild(child);
6         child = child.nextElementSibling;
7     }
时间: 2024-08-15 23:25:07

DOM扩展-Selectors API(选择符 API)的相关文章

选择符API

querySelector() querySelector()方法接收一个CSS选择符,返回与该模式匹配的第一个元素,如果没有找到匹配的元素,返回null. //获得body元素 var body = document.querySelector("body"); //获得ID为"myDiv"的元素 var myDiv = document.querySelector('#myDiv'); //获得类为"selected"的第一个元素 var s

ASP.NET Web API——选择Web API还是WCF

WCF是.NET平台服务开发的一站式框架,那么为什么还要有ASP.NET Web API呢?简单来说,ASP.NET Web API的设计和构建只考虑了一件事情,那就是HTTP,而WCF的设计主要是考虑SOAP和WS-*. WCF已经出现好多年了,相对来说ASP.NET Web API还是个小孩子,但是不意味着ASP.NET Web API要代替WCF,在不同的场合,它们各有长处.ASP.NET Web API非常轻量,在功能和灵活性上都不能和WCF相比.如果你的服务是基于TCP的,或者支持更多

10. javacript高级程序设计-DOM扩展

1. DOM扩展 1.1 选择符API l querySelector() 接收一个css选择符,返回与该模式匹配的第一个元素 l querySelectorAll() 接收一个css选择符,返回所有匹配的NodeList元素 1.2 HTML5 1.2.1 与类相关的扩充 l getElementsByClassName() 接收一个参数,一个包含一或者多个类名的字符串,返回带有指定类的所有元素的NodeList l classList属性,add(value),contains(value)

DOM扩展:DOM API的进一步增强[总结篇-下]

本文承接<DOM扩展:DOM API的进一步增强[总结篇-上]>,继续总结DOM扩展相关的功能和API. 3.6 插入标记 DOM1级中的接口已经提供了向文档中插入内容的接口,但是在给文档插入大量HTML标记的时候操作还是很繁杂的,每次插入一个元素,不仅要调用创建元素和文本节点的接口,还要调用appendChild等向文档中添加元素的接口,而且在添加时还要按照正确的顺序.而如果使用插入标记的方法,直接向文档中插入HTML字符串,由执行环境自动解析HTML字符串并创建相应的节点并添加到文档中,这

javascript高级程序设计 第十一章--DOM扩展

javascript高级程序设计 第十一章--DOM扩展DOM最主要的扩展就是选择符API.HTML5和Element Traversal Selectors API:定义了两个方法 querySelector() 和 querySelectorAll(),能够基于CSS选择符从DOM中取得元素.querySelector()方法接收一个CSS选择符,返回该模式匹配的第一个元素,querySelectorAll()接收的参数一样,但是返回NodeList实例: matchesSelector()

JavaScript学习 八、DOM扩展

对DOM的两个主要扩展是Selectors API(选择符API)和HTML5.这两个扩展都是源自开发社区.此外还有一个不那么因为瞩目的ELement Traversal(元素遍历)规范.为DOM添加了一些属性. 选择符API 众多JavaScript 库中最常用的一项功能,就是根据CSS选择符选择与某个模式匹配的DOM元素. 实际上 jQuery 的核心就是通过CSS选择符查询DOM 文档取得元素的引用,从而抛开了 getElementById() 和 getElementsByTagName

DOM扩展学习笔记

对DOM的两个主要扩展是Selectors API(选择符API)和HTML5,还有一个不太瞩目的Element Traversal元素遍历规范为DOM添加了一些属性,另外还有一些专有扩展. 选择符API 元素遍历 HTML5 专有扩展 选择符API 让浏览器原生支持css查询,原理就是所有实现这一功能的JavaScript库都会写一个基础的CSS解析器,然后再使用已有的DOM方法查询文档并找到匹配的节点.当把这个功能变成原生API后,解析和树查询操作可以在浏览器内部通过编译后的代码来完成,极大

JavaScript学习笔记(十一)---- DOM扩展

(一)DOM扩展 对DOM的主要的扩展是SelectorsAPI(选择符API)和HTML5,还有一个Element Travesal规范. 1.选择符API jQuery的核心就是通过CSS选择符查询DOM文档取得元素的引用,从而抛开了getElementById( ) 和 getElementsByTagName( ). Selectors API Level 1的核心是两个方法:querySelector( )和 querySelectorAll( ). querySelector( ):

第十一章:DOM扩展

DOM扩展 选择符API querySelector方法 querySelectorAll方法 matchesSelector方法 元素遍历 HTML5 与类相关的补充 getElementsByClassName 方法 classList属性 焦点管理 HTMLDocument的变化 readyState 属性 兼容模式 head属性 字符集属性 自定义数据属性 插入标记 innerHTML 属性 outerHTML inserAdjacentHTML 方法 内存和性能问题 scrollInt