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 相关文章推荐
基于jquery的二级联动菜单实现代码
Apr 25 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
使用javascript实现有效时间的控制,并显示将要过期的时间
Jan 02 Javascript
jQuery源码分析之jQuery中的循环技巧详解
Sep 06 Javascript
JS实现OCX控件的事件响应示例
Sep 17 Javascript
BootStrap响应式导航条实例介绍
May 06 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
ejsExcel模板在Vue.js项目中的实际运用
Jan 27 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
vue脚手架及vue-router基本使用
Apr 09 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
May 10 Javascript
关于vue 项目中浏览器跨域的配置问题
Nov 10 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
PHP判断文章里是否有图片的简单方法
2014/07/26 PHP
PHP微信开发之文本自动回复
2016/06/23 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
2019/12/13 PHP
jquery动态加载js/css文件方法(自写小函数)
2014/10/11 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
Angularjs为ng-click事件传递参数
2017/06/15 Javascript
小程序实现多选框功能
2018/10/30 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
python zip文件 压缩
2008/12/24 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
对比Python中__getattr__和 __getattribute__获取属性的用法
2016/06/21 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
Python面向对象之类的内置attr属性示例
2018/12/14 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
python生成器推导式用法简单示例
2019/10/08 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
大专学生推荐信范文
2013/11/19 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
单位在职证明范本
2014/01/09 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
中文教师求职信
2014/02/22 职场文书
工作检讨书大全
2015/01/26 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
教师教育心得体会
2016/01/19 职场文书
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL