zoukankan      html  css  js  c++  java
  • javascript选择器querySelector和querySelectorAll的使用和区别

    querySelector 和 querySelectorAll 方法是 W3C Selectors API 规范中定义的。他们的作用是根据 CSS 选择器规范,便捷定位文档中指定元素。

    目前几乎主流浏览器均支持了他们。包括 IE8(含) 以上版本、 Firefox、 Chrome、Safari、Opera。

    querySelector 和 querySelectorAll 在规范中定义了如下接口:

    module dom {
    [Supplemental, NoInterfaceObject]
    interface NodeSelector {
    Element querySelector(in DOMString selectors);
    NodeList querySelectorAll(in DOMString selectors);
    };
    Document implements NodeSelector;
    DocumentFragment implements NodeSelector;
    Element implements NodeSelector;
    };

    从接口定义可以看到Document、DocumentFragment、Element都实现了NodeSelector接口。即这三种类型的元素都拥 有者两个方法。querySelector和querySelectorAll的参数须是符合 css selector 的字符串。不同的是querySelector返回的是一个对象,querySelectorAll返回的一个集合(NodeList)。

    获取ID为abc的元素:

    1 document.getElementById('abc');
    2 //or
    3 document.querySelector('#abc');
    4 //or
    5 document.querySelectorAll('#abc')[0];

    获取class为abc的元素:

    1 document.getElementByClassName('abc');
    2 //or
    3 document.querySelector('.abc');
    4 //or
    5 document.querySelectorAll('.abc')[0];

     

    Element.querySelector和Element.querySelectorAll和jQuery(element).find(selector)选择器的区别:


     1 <body>
     2 <div id="test1"><a href="#">abc</a></div>
     3 <p id="bar">111</p>
     4 <script>
     5     var d1 = document.getElementById('test1'),
     6     obj1 = d1.querySelector('div a'),
     7     obj2 = d1.querySelectorAll('div a');
     8     obj3 = $(d1).find('div a');
     9     console.log(obj1)//<a href="#">abc</a>
    10     console.log(obj2.length)//1
    11     console.log(obj3)//null
    12 </script>
    13 //querySelectorAll 在文档内找全部符合选择器描述的节点包括Element本身
    14 //jQuery(element).find(selector) 在文档内找全部符合选择器描述的节点不包括Element本身
    15 </body>

    误解就在于对d1.querySelectorAll('div a')的实现理解,不少人一开始几乎都认为是直接从div[id='test']的孩子中进行查找,实际上它还是根据selector string先从整个document上查找,再返回属于div[id='test']的子节点。很多人会疑惑,那么为什么不按照直接按父节点找子节点的 方式来实现呢?就像elem.getElementsByTagName。

    querySelector只返回匹配的第一个元素,如果没有匹配项,返回null。
    querySelectorAll返回匹配的元素集合,如果没有匹配项,返回空的nodelist(节点数组)。
    并且返回的结果是静态的,之后对document结构的改变不会影响到之前取到的结果。 

  • 相关阅读:
    Entity Framework 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭 异常处理
    MD5加密
    让AutoMapper在你的项目里飞一会儿
    C# SFTP上传与下载
    读取、修改配置文件节点
    C#对数据库的操作(增删改查)
    实现Icommand接口
    wpf创建用户控件(计时器控件)
    用lpeg解析文本语法
    一种简单的客户端更新方案
  • 原文地址:https://www.cnblogs.com/zhangjiehui/p/4386117.html
Copyright © 2011-2022 走看看