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 相关文章推荐
jquery判断字符输入个数(数字英文长度记为1,中文记为2,超过长度自动截取)
Oct 15 Javascript
基于datagrid框架的查询
Apr 08 Javascript
jQuery实现点击图片翻页展示效果的方法
Feb 16 Javascript
jQuery遮罩层效果实例分析
Jan 14 Javascript
JS判断两个对象内容是否相等的方法示例
Apr 10 Javascript
Vue 2.0的数据依赖实现原理代码简析
Jul 10 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
Oct 26 Javascript
Vue cli构建及项目打包以及出现的问题解决
Aug 27 Javascript
vue数据操作之点击事件实现num加减功能示例
Jan 19 Javascript
express.js中间件说明详解
Mar 19 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
在nuxt中使用路由重定向的实例
Nov 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
php和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
深入理解PHP中的global
2014/08/19 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
一个javascript参数的小问题
2008/03/02 Javascript
js 获取浏览器高度和宽度值(多浏览器)
2009/09/02 Javascript
JavaScript性能优化 创建文档碎片(document.createDocumentFragment)
2010/07/13 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
简短几句jquery代码的实现一个图片向上滚动切换
2011/09/02 Javascript
javascript继承之为什么要继承
2012/11/10 Javascript
Egret引擎开发指南之发布项目
2014/09/03 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
浅析java线程中断的办法
2018/07/29 Javascript
js使用ajax传值给后台,后台返回字符串处理方法
2018/08/08 Javascript
jquery.param()实现数组或对象的序列化方法
2018/10/08 jQuery
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
微信小程序动态评分展示/五角星展示/半颗星展示/自定义长度展示功能的实现
2020/07/22 Javascript
vue在App.vue文件中监听路由变化刷新页面操作
2020/08/14 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
树莓派安装OpenCV3完整过程的实现
2019/10/10 Python
如何基于Python创建目录文件夹
2019/12/31 Python
python 实现简易的记事本
2020/11/30 Python
python 逆向爬虫正确调用 JAR 加密逻辑
2021/01/12 Python
Python 爬取淘宝商品信息栏目的实现
2021/02/06 Python
澳大利亚潮流尖端的快时尚品牌:Cotton On
2016/09/26 全球购物
静态变量和实例变量的区别
2015/07/07 面试题
运动会广播稿500字
2014/01/28 职场文书
领导接待方案
2014/03/13 职场文书
教师实习自我鉴定总结
2019/08/20 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
清空 Oracle 安装记录并重新安装
2022/04/26 Oracle
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python