javascript之querySelector和querySelectorAll使用说明


Posted in Javascript onOctober 09, 2011

一开始很多人都会拿jquery的选择器来跟这两个api做对比(我也是),比较异同本来没事,但却使一些同学对这两个api在浏览器中的实现产生了误解,特别是再dom element上调用此api时。

下面是我的jsFiddle示例,我就以此展开说明:

(function(global) { 
global.doc = document; 
global.body = doc.getElementsByTagName('body')[0]; 
global.$ = function(id) { 
return doc.getElementById(id); 
} global.Logger = function(id) { 
this.logElem = $(id); 
this.logArr = []; 
}; 
global.Logger.prototype = { 
constructor: global.logger, 
append: function(comment) { 
this.logArr.push('<p>' + comment + '</p>'); 
}, 
flush: function() { 
this.logElem.innerHTML = this.logArr.join(''); 
}, 
clear: function() { 
this.logElem.innerHTML = ''; 
this.logArr = []; 
} 
}; 
})(this); 
(function() { 
var logger = new Logger('log'); 
var items = $('inner').querySelectorAll('#main h4.inside'); 
logger.append(items.length); 
for(var i = 0, len = items.length; i < len; i++) { 
logger.append(items[i].innerHTML); 
} 
logger.flush(); 
})();

误解就在于对$('inner').querySelectorAll('#main h4.inside')的实现理解,不少人一开始几乎都认为是直接从div[id='inner']的孩子中进行查找(我也是),这个#main有点碍眼。实际上它还是根据selector string从整个document上查找,再返回属于div[id='inner']的子节点。很多人会疑惑,那么为什么不按照直接按父节点找子节点的方式来实现呢?就像elem.getElementsByTagName,我的想法是灵活selector string吧。

querySelector只返回匹配的第一个元素,如果没有匹配项,返回null。

querySelectorAll返回匹配的元素集合,如果没有匹配项,返回空的nodelist(节点数组)。

并且返回的结果是静态的,之后对document结构的改变不会影响到之前取到的结果。

目前IE8+,ff,chrome都支持此api(IE8中的selector string只支持css2.1的)。

Javascript 相关文章推荐
简单JS代码压缩器
Oct 12 Javascript
JavaScript实现判断图片是否加载完成的3种方法整理
Mar 13 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
animate 实现滑动切换效果【实例代码】
May 05 Javascript
js 连续赋值的简单实现
Jun 13 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
利用jQuery插件imgAreaSelect实现获得选择域的图像信息
Dec 02 Javascript
JavaScript轮播图简单制作方法
Feb 20 Javascript
Angular2实现自定义双向绑定属性
Mar 22 Javascript
jQuery实现验证表单密码一致性及正则表达式验证邮箱、手机号的方法
Dec 05 jQuery
element-ui 本地化使用教程详解
Oct 28 Javascript
JavaScript流程控制(循环)
Dec 06 Javascript
使用jQuery操作Cookies的实现代码
Oct 09 #Javascript
jQuery实现切换页面布局使用介绍
Oct 09 #Javascript
passwordStrength 基于jquery的密码强度检测代码使用介绍
Oct 08 #Javascript
关于jQuery的inArray 方法介绍
Oct 08 #Javascript
imgAreaSelect 中文文档帮助说明
Oct 08 #Javascript
JavaScript判断一个URL链接是否有效的实现方法
Oct 08 #Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
Oct 07 #Javascript
You might like
joomla数据库操作示例代码
2016/01/06 PHP
简单实用的PHP文本缓存类实例
2019/03/22 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
javascript验证身份证完全方法具体实现
2013/11/18 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
初识Node.js
2015/03/20 Javascript
js控制多图左右滚动切换效果代码分享
2015/08/26 Javascript
基于jquery实现复选框全选,反选,全不选等功能
2015/10/16 Javascript
JS实现的3D拖拽翻页效果代码
2015/10/31 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
基于Vue的移动端图片裁剪组件功能
2017/11/28 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
element-ui 表格实现单元格可编辑的示例
2018/02/26 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
ES10的13个新特性示例(小结)
2019/09/23 Javascript
解决pycharm双击但是无法打开的情况
2020/10/31 Javascript
学习python之编写简单乘法口诀表实现代码
2016/02/27 Python
Python的Flask框架中的Jinja2模板引擎学习教程
2016/06/30 Python
Python下实现的RSA加密/解密及签名/验证功能示例
2017/07/17 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
2018/04/02 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
2018/10/14 Python
python web框架 django wsgi原理解析
2019/08/20 Python
大学生就业自荐信
2013/10/26 职场文书
社区清明节活动总结
2014/07/04 职场文书
师德师风整改措施
2014/10/24 职场文书
美术教师求职信范文
2015/03/20 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
党性修养心得体会2016
2016/01/21 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js