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 相关文章推荐
ppk谈JavaScript style属性
Oct 10 Javascript
用js统计用户下载网页所需时间的脚本
Oct 15 Javascript
js鼠标滑过弹出层的定位IE6bug解决办法
Dec 26 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
Mar 20 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
Apr 16 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
Nov 25 Javascript
深入理解jQuery事件绑定
Jun 02 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
Jul 18 Javascript
React Native中TabBarIOS的简单使用方法示例
Oct 13 Javascript
小程序如何构建骨架屏
May 29 Javascript
jquery制作的移动端购物车效果完整示例
Feb 24 jQuery
使用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 mysql procedure实现获取多个结果集的方法【基于thinkPHP】
2016/11/09 PHP
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
使用jQuery validate 验证注册表单实例演示
2013/03/25 Javascript
jQuery选择器querySelector的使用指南
2015/01/23 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
antd table按表格里的日期去排序操作
2020/11/17 Javascript
vue element el-transfer增加拖拽功能
2021/01/15 Vue.js
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
Python使用scrapy采集数据过程中放回下载过大页面的方法
2015/04/08 Python
python实现杨辉三角思路
2017/07/14 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python读取word文本操作详解
2018/01/22 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
使用python生成目录树
2018/03/29 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
如何配置关联Python 解释器 Anaconda的教程(图解)
2020/04/30 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
HTML5 Canvas玩转酷炫大波浪进度图效果实例(附demo)
2016/12/14 HTML / CSS
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
俄罗斯儿童和青少年服装、鞋子及配件的在线商店:Orby
2020/02/20 全球购物
无财产无子女离婚协议书范文
2014/09/14 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
2014年城管工作总结
2014/11/20 职场文书
高二化学教学反思
2016/02/22 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang