码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-09-12 18:59:33      阅读:246      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   os   使用   java   

(一)DOM扩展

对DOM的主要的扩展是SelectorsAPI(选择符API)和HTML5,还有一个Element Travesal规范。

1.选择符API

jQuery的核心就是通过CSS选择符查询DOM文档取得元素的引用,从而抛开了getElementById( ) 和 getElementsByTagName( ).

Selectors API Level 1的核心是两个方法:querySelector( )和 querySelectorAll( ).

  • querySelector( ):接收一个css选择符,返回与该模式匹配的第一个元素。如果没有找到匹配的元素,则返回null。
<body>
        <ul>
            <li>First item</li>
            <li class="selected">Second item</li>
            <li>Third item</li>
        </ul>
        <script> 
            if(document.querySelector){
                var body = document.querySelector("body");
                alert(body); //[object HTMLBodyElement]
                
                var selected = document.querySelector(".selected");
                alert(selected.nodeName); //LI
                
                var img = document.body.querySelector("img.button");
                alert(img); //null
            }else{
                alert("Not Supported QuerySelector");
            }            
        </script> 
    </body>

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

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

  • querySelectorAll( )方法:接收参数也是一个CSS选择符,但返回的是所有匹配的元素而不仅仅是一个元素。返回一个NodeList对象。

  能够调用querySelectorAll( )方法的类型包括Document、DocumentFragment 和 Element。

bubuko.com,布布扣
<body>
        <ul>
            <li>First item</li>
            <li class="selected">Second item</li>
            <li>Third item</li>
        </ul>
        <p><strong>Pellentesque habitant morbi tristique</strong> senectus et
        it amet quam egestas semper. <em>Aenean ultricies mi vitae est.</em> M
        auris placerat eleifend leo.  <code>commodo vitae</code>, ornare c dui. 
        <a href="#">Donec non enim</a> in turpis pulvinar facilisis. Ut felis.</p>
        
         <blockquote><p>Lorem ipsum dolor sit amet, <strong>consectetur adipiscing
          elit</strong>. pretium ornare est.</p></blockquote>
          
        <script> 
            if(document.querySelectorAll){
                var em = document.querySelectorAll("em");
                //alert(em.length); //1
                
                var strongs = document.querySelectorAll("p strong");
                alert(strongs.length);//2
            }else{
                alert("Not Supported QuerySelectorAll");
            }            
        </script> 
    </body>
View Code

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

    <script> 
            if(document.querySelectorAll){                        
                var strongs = document.querySelectorAll("p strong");
                for(var i=0,len = strongs.length;i<len;i++){
                    strongs[i].className = "important"; 
                }
            }else{
                alert("Not Supported QuerySelectorAll");
            }            
        </script> 
  • matchesSelector( )方法:接收参数也是CSS选择符,如果调用元素与该元素符匹配,返回true;否则返回false。

如果要使用这个方法,做好编写一个包装函数。

    <script> 
            function matchesSelector(element,selector){
                if(element.matchesSelector){
                    return element.matchesSelector(selector);
                }else if(element.msMatchesSelector){ //IE 9+
                    return element.msMatchesSelector(selector);
                }else if(element.mozMatchesSelector){ //firefox
                    return element.mozMatchesSelector(selector);
                }else if(element.webkitMatchesSelector){ //Chrome
                    return element.webkitMatchesSelector(selector);
                }else{
                    throw new Error("Not supported.") ;
                }
            }
            if(matchesSelector(document.body,"body.page1")){
                alert("It‘s the page1!");
            }            
        </script> 

2.Element Traversal 规范,元素遍历

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

  Element Traversal API 为DOM 元素添加了以下5个属性:

  • childElementCount:返回子元素的个数(不包括文本节点和注释)。
  • firstElementChild:指向第一个子元素;firstChild的元素版。
  • lastElementChild:指向最后一个子元素;lastChild的元素版。
  • previousElementSibling:指向前一个同辈元素;previousSibling的元素版。
  • nextElementSibling:指向后一个同辈元素;nextSibling的元素版。

 

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

标签:des   style   blog   http   color   io   os   使用   java   

原文地址:http://www.cnblogs.com/yanyangbyou/p/3968757.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!