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的实现原理的模拟代码 -2 数据部分
Aug 01 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
Feb 26 Javascript
js随机颜色代码的多种实现方式
Apr 23 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
js获取当前地址 JS获取当前URL的示例代码
Feb 26 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
Jun 24 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
May 09 Javascript
bootstrap模态框实现拖拽效果
Dec 14 Javascript
jQuery简单实现遍历单选框的方法
Mar 06 Javascript
AngulaJS路由 ui-router 传参实例
Apr 28 Javascript
详解webpack2+React 实例demo
Sep 11 Javascript
jquery实现Ajax请求的几种常见方式总结
May 28 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中的global
2014/08/19 PHP
thinkPHP简单实现多个子查询语句的方法
2016/12/05 PHP
JQuery Tips(2) 关于$()包装集你不知道的
2009/12/14 Javascript
在javascript中关于节点内容加强
2013/04/11 Javascript
JS清除IE浏览器缓存的方法
2013/07/26 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
javascript实现删除前弹出确认框
2015/06/04 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
详解Angular中$cacheFactory缓存的使用
2016/08/19 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
jQuery插件echarts实现的多柱子柱状图效果示例【附demo源码下载】
2017/03/04 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
js实现录音上传功能
2019/11/22 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
探究一道价值25k的蚂蚁金服异步串行面试题
2020/08/21 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
python执行外部程序的常用方法小结
2015/03/21 Python
python实现排序算法解析
2018/09/08 Python
Laravel+Dingo/Api 自定义响应的实现
2019/02/17 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
HTML5 form标签之解放表单验证、增加文件上传、集成拖放的使用方法
2013/04/24 HTML / CSS
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
入党自我鉴定
2014/03/25 职场文书
乡镇干部个人对照检查材料思想汇报(原创篇)
2014/09/28 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
商业计划书格式、范文
2019/03/21 职场文书
Python标准库pathlib操作目录和文件
2021/11/20 Python