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 相关文章推荐
用于table内容排序
Jul 21 Javascript
javascript multibox 全选
Mar 22 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
form.submit()不能提交表单的错误原因及解决方法
Oct 13 Javascript
使用mini-define实现前端代码的模块化管理
Dec 25 Javascript
详解Jquery实现ready和bind事件
Apr 14 Javascript
jquery如何实现点击空白处隐藏元素
Dec 05 jQuery
element-ui 限制日期选择的方法(datepicker)
May 16 Javascript
JavaScript使用小插件实现倒计时的方法讲解
Mar 11 Javascript
移动端JS实现拖拽两种方法解析
Oct 12 Javascript
vue项目实现减少app.js和vender.js的体积操作
Nov 12 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求两个文件的相对路径
2013/06/20 PHP
php基于base64解码图片与加密图片还原实例
2014/11/03 PHP
Yii配置文件用法详解
2014/12/04 PHP
Yii隐藏URL中index.php的方法
2016/07/12 PHP
PHP给源代码加密的几种方法汇总(推荐)
2018/02/06 PHP
Tips 带三角可关闭的文字提示
2010/10/06 Javascript
重写javascript中window.confirm的行为
2012/10/21 Javascript
jquery 通过name快速取值示例
2014/01/24 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
JS仿Windows开机启动Loading进度条的方法
2015/02/26 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
JS实现的简单表单验证功能示例
2017/10/13 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
angular 服务随记小结
2019/05/06 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
Vue多选列表组件深入详解
2021/03/02 Vue.js
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Python获取统计自己的qq群成员信息的方法
2019/11/15 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
2020/02/11 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
2020/06/15 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
大学生找工作求职信
2014/07/09 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
三方合作意向书范本
2015/05/09 职场文书
2015年卫生院健康教育工作总结
2015/07/24 职场文书
详解Python为什么不用设计模式
2021/06/24 Python