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 相关文章推荐
QQ空间顶部折页撕开效果示例代码
Jun 15 Javascript
关于javascript模块加载技术的一些思考
Nov 28 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 Javascript
JS实现网页滚动条感应鼠标变色的方法
Feb 26 Javascript
在Node.js应用中读写Redis数据库的简单方法
Jun 30 Javascript
微信小程序开发之toast等弹框提示使用教程
Jun 08 Javascript
bootstrap-Treeview实现级联勾选
Nov 23 Javascript
Vue.JS项目中5个经典Vuex插件
Nov 28 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
node.js 微信开发之定时获取access_token
Feb 07 Javascript
详解template标签用法(含vue中的用法总结)
Jan 12 Vue.js
使用Cargo工具高效创建Rust项目
Aug 14 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
在PHP里得到前天和昨天的日期的代码
2007/08/16 PHP
php 操作符与控制结构
2012/03/07 PHP
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
如何获取网站icon有哪些可行的方法
2014/06/05 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
js获取元素外链样式的方法
2015/01/27 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
jQuery旋转木马式幻灯片轮播特效
2015/12/04 Javascript
jQuery筛选数组之grep、each、inArray、map的用法及遍历json对象
2016/06/20 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
2017/04/22 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
Angular4 中常用的指令入门总结
2017/06/12 Javascript
javascript中的闭包概念与用法实践分析
2019/07/26 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
Vue项目打包编译优化方案
2020/09/16 Javascript
详解Python中的__new__、__init__、__call__三个特殊方法
2016/06/02 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python的等深分箱实例
2019/11/22 Python
tensorflow指定GPU与动态分配GPU memory设置
2020/02/03 Python
Django 再谈一谈json序列化
2020/03/16 Python
Python的轻量级ORM框架peewee使用教程
2021/02/05 Python
华润集团网上药店:健一网
2016/09/19 全球购物
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
在阿联酋购买翻新手机和平板电脑:Teckzu
2021/02/12 全球购物
C#中有没有静态构造函数,如果有是做什么用的?
2016/06/04 面试题
人力资源管理专业应届生求职信
2013/09/28 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
保险专业自荐信范文
2014/02/20 职场文书
竞选班长自荐书范文
2014/03/09 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
应届毕业生求职信
2014/05/26 职场文书
七年级地理教学计划
2015/01/22 职场文书
公司聚餐通知
2015/04/22 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书