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 相关文章推荐
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
Apr 24 Javascript
AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
Mar 04 Javascript
Function.prototype.bind用法示例
Sep 16 Javascript
Js base64 加密解密介绍
Oct 11 Javascript
一个简单的jquery进度条示例
Apr 28 Javascript
JavaScript中的Promise使用详解
Jun 24 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
JQuery Dialog对话框 不能通过Esc关闭的原因分析及解决办法
Jan 18 Javascript
javascript数据类型详解
Feb 07 Javascript
基于jQuery实现Ajax验证用户名是否可用实例
Mar 25 jQuery
解决vue props 拿不到值的问题
Sep 11 Javascript
深入浅析js原型链和vue构造函数
Oct 25 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
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php递归删除目录与文件的方法
2015/01/30 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
JavaScript的Cookies
2008/01/16 Javascript
JavaScript库 开发规则
2009/01/31 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
JavaScript实现网页头部进度条刷新
2017/04/16 Javascript
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
详解python时间模块中的datetime模块
2016/01/13 Python
Python连接PostgreSQL数据库的方法
2016/11/28 Python
python脚本实现验证码识别
2018/06/07 Python
Python如何基于smtplib发不同格式的邮件
2019/12/30 Python
Pytorch损失函数nn.NLLLoss2d()用法说明
2020/07/07 Python
Python发送邮件实现基础解析
2020/08/14 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
5 分钟读懂Python 中的 Hook 钩子函数
2020/12/09 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
Waterford加拿大官方网站:世界著名的水晶杯品牌
2016/11/01 全球购物
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
行政人事岗位职责
2014/03/17 职场文书
施工安全责任书
2014/04/14 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
工作收入证明模板
2014/10/10 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
详解Javascript实践中的命令模式
2021/05/05 Javascript
Golang并发工具Singleflight
2022/05/06 Golang