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 相关文章推荐
DOM相关内容速查手册
Feb 07 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
JS调用页面表格导出excel示例代码
Mar 18 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
jquery实现页面关键词高亮显示的方法
Mar 12 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
Jan 26 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
May 13 Javascript
jQuery实现模拟flash头像裁切上传功能示例
Dec 11 Javascript
JS中使用gulp实现压缩文件及浏览器热加载功能
Jul 12 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
boostrap模态框二次弹出清空原有内容的方法
Aug 10 Javascript
全局安装 Vue cli3 和 继续使用 Vue-cli2.x操作
Sep 08 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 flock 文件锁详细介绍
2012/12/29 PHP
如何用php获取文件名后缀
2013/06/09 PHP
php构造函数实例讲解
2013/11/13 PHP
php短信接口代码
2016/05/13 PHP
JS 建立对象的方法
2007/04/21 Javascript
jquery 指南/入门基础
2007/11/30 Javascript
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
从零学jquery之如何使用回调函数
2014/05/16 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
Angular路由简单学习
2016/12/26 Javascript
微信小程序 MD5加密登录密码详解及实例代码
2017/01/12 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
AngularJS $http post 传递参数数据的方法
2018/10/09 Javascript
vue通过cookie获取用户登录信息的思路详解
2018/10/30 Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
2020/05/13 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
2020/08/03 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
浅析python中SQLAlchemy排序的一个坑
2017/02/24 Python
Python使用pylab库实现画线功能的方法详解
2017/06/08 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
2018/01/29 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
Python实现的NN神经网络算法完整示例
2018/06/19 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
荷兰网上药店:Drogisterij.net
2019/09/03 全球购物
党员示范岗材料
2014/12/19 职场文书
挂靠协议书
2015/01/27 职场文书
年底个人总结范文
2015/03/10 职场文书
母亲去世追悼词
2015/06/23 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
Mysql中存储引擎的区别及比较
2021/06/04 MySQL