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 相关文章推荐
如何在Mozilla Gecko 用Javascript加载XSL
Jan 09 Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
jquery 漂亮的删除确认和提交无刷新删除示例
Nov 13 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
jQuery过滤选择器:not()方法使用介绍
Apr 20 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
jQuery基于$.ajax设置移动端click超时处理方法
May 14 Javascript
js 获取本地文件及目录的方法(推荐)
Nov 10 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 jQuery
微信小程序中使用vant框架的具体步骤
Feb 18 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制作新闻系统的思路
2006/10/09 PHP
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
codeigniter集成ucenter1.6双向通信的解决办法
2014/06/12 PHP
PHP连接access数据库
2015/03/27 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
JS定义回车事件(实现代码)
2013/07/08 Javascript
nodejs中转换URL字符串与查询字符串详解
2014/11/26 NodeJs
JavaScript中实现继承的三种方式和实例
2015/01/29 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
谈谈JavaScript中function多重理解
2015/08/28 Javascript
JS获取文件大小方法小结
2015/12/08 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
jQuery简单动画变换效果实例分析
2016/07/04 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
JS实现的将html转为pdf功能【基于浏览器端插件jsPDF】
2018/02/06 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
[01:23]2019完美世界全国高校联赛(春季赛)合肥全国总决赛
2019/06/10 DOTA
浅谈Django REST Framework限速
2017/12/12 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
python 使用cx-freeze打包程序的实现
2020/03/14 Python
Python3爬虫关于代理池的维护详解
2020/07/30 Python
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
应用服务器有那些
2012/01/19 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
实习单位评语
2014/04/26 职场文书
保研推荐信
2014/05/09 职场文书
保洁公司服务承诺书
2014/05/28 职场文书
森马旗舰店双十一营销方案
2014/09/29 职场文书
网络工程专业大学生求职信
2014/10/01 职场文书
Redis分布式锁Redlock的实现
2021/08/07 Redis
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技
nginx 添加http_stub_status_module模块
2022/05/25 Servers