javascript高级选择器querySelector和querySelectorAll全面解析


Posted in Javascript onApril 07, 2016

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)。

获取页面I属性D为test的元素:

1 document.getElementById("test");
2 document.querySelector("#test");
3 document.querySelectorAll("#test")[0];

获取页面class属性为”red”的元素:

document.getElementsByClassName('red')
document.querySelector('.red')
document.querySelectorAll('.red')

ps:

 但需要注意的是返回的nodeList集合中的元素是非实时(no-live)的,想要区别什么是实时非实时的返回结果,请看下例:

<div id="container">
   <div></div>
   <div></div>
 </div>
//首先选取页面中id为container的元素
container=document.getElementById('#container');
console.log(container.childNodes.length)//结果为2
//然后通过代码为其添加一个子元素
container.appendChild(document.createElement('div'));
//这个元素不但添加到页面了,这里的变量container也自动更新了
console.log(container.childNodes.length)//结果为3

通过上面的例子就很好地理解了什么是会实时更新的元素。document.getElementById返回的便是实时结果,上面对其添加一个子元素后,再次获取所有子元素个数,已经由原来的2个更新为3个(这里不考虑有些浏览器比如Chrome会把空白也解析为一个子节点)。

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

 

<SPAN style="FONT-SIZE: 15px"><divid="test1"><ahref="https://3water.com/">三水点靠木</a></div> 
<pid="bar">111</p> 
<script> 
var d1 = document.getElementById('test1'), 
obj1 = d1.querySelector('div a'), 
obj2 = d1.querySelectorAll('div a'); 
obj3 = $(d1).find('div a'); 
console.log(obj1)//<a href="https://3water.com/">三水点靠木</a> 
console.log(obj2.length)//1 
console.log(obj3)//null 
</script> 
</SPAN>

 querySelectorAll 在文档内找全部符合选择器描述的节点包括Element本身

jQuery(element).find(selector) 在文档内找全部符合选择器描述的节点不包括Element本身

以上这篇javascript高级选择器querySelector和querySelectorAll全面解析就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
用js判断浏览器是否是IE的比较好的办法
May 08 Javascript
JavaScript 对象的属性和方法4种不同的类型
Mar 19 Javascript
JS实现self的resend
Jul 22 Javascript
通过onmouseover选项卡实现img图片的变化
Feb 12 Javascript
ionic在开发ios系统微信时键盘挡住输入框的解决方法(键盘弹出问题)
Sep 06 Javascript
Vue实现购物车功能
Apr 27 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
AngularJS 监听变量变化的实现方法
Oct 09 Javascript
JavaScript使用Math.random()生成简单的验证码
Jan 21 Javascript
JS实现灯泡开关特效
Mar 30 Javascript
vue实现户籍管理系统
May 29 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 #Javascript
纯js实现瀑布流布局及ajax动态新增数据
Apr 07 #Javascript
原生JavaScript实现Ajax的方法
Apr 07 #Javascript
JavaScript数据推送Comet技术详解
Apr 07 #Javascript
js实现商品抛物线加入购物车特效
Nov 18 #Javascript
js类式继承与原型式继承详解
Apr 07 #Javascript
javascript原型继承工作原理和实例详解
Apr 07 #Javascript
You might like
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
新版PHP极大的增强功能和性能
2006/10/09 PHP
GD输出汉字的函数的分析
2006/10/09 PHP
php压缩多个CSS为一个css的代码并缓存
2011/04/21 PHP
探讨如何把session存入数据库
2013/06/07 PHP
PHP保留两位小数并且四舍五入及不四舍五入的方法
2013/09/22 PHP
Zend studio文件注释模板设置方法
2013/09/29 PHP
php之curl实现http与https请求的方法
2014/10/21 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
[原创]php token使用与验证示例【测试可用】
2017/08/30 PHP
PHP开发的文字水印,缩略图,图片水印实现类与用法示例
2019/04/12 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
理解javascript async的用法
2017/08/22 Javascript
angular2组件中定时刷新并清除定时器的实例讲解
2018/08/31 Javascript
浅析js实现网页截图的两种方式
2019/11/01 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
js制作提示框插件
2020/12/24 Javascript
jQuery实现简单轮播图效果
2020/12/27 jQuery
详解Vue.js 可拖放文本框组件的使用
2021/03/03 Vue.js
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
linux系统使用python监测网络接口获取网络的输入输出
2014/01/15 Python
Python中文编码那些事
2014/06/25 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
django 模版关闭转义方式
2020/05/14 Python
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
new修饰符是起什么作用
2015/06/28 面试题
优秀毕业生自荐信
2014/06/10 职场文书
2014幼儿园教师师德师风演讲稿
2014/09/10 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python