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 相关文章推荐
深入理解JavaScript系列(8) S.O.L.I.D五大原则之里氏替换原则LSP
Jan 15 Javascript
js replace正则表达式应用案例讲解
Jan 17 Javascript
JS实现图片横向滚动效果示例代码
Sep 04 Javascript
jQuery遍历json中多个map的方法
Feb 12 Javascript
JavaScript中innerHTML,innerText,outerHTML的用法及区别
Sep 01 Javascript
javascript判断图片是否加载完成的方法推荐
May 13 Javascript
jquery通过name属性取值的简单实现方法
Jun 20 Javascript
值得分享的JavaScript实现图片轮播组件
Nov 21 Javascript
node通过npm写一个cli命令行工具
Oct 12 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
Sep 18 Javascript
Vue3为什么这么快
Sep 23 Javascript
javascript实现固定侧边栏
Feb 09 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
phpwind中的数据库操作类
2007/01/02 PHP
php分页函数示例代码分享
2014/02/24 PHP
CodeIgniter框架常见用法工作总结
2017/03/16 PHP
jQuery 瀑布流 绝对定位布局(二)(延迟AJAX加载图片)
2012/05/23 Javascript
js显示时间 js显示最后修改时间
2013/01/02 Javascript
Jquery操作下拉框(DropDownList)实现取值赋值
2013/08/13 Javascript
js图片处理示例代码
2014/05/12 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
用JS中split方法实现彩色文字背景效果实例
2016/08/24 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
Jquery给当前页或者跳转后页面的导航栏添加选中后样式的实例
2016/12/08 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
浅谈Vue SSR 的 Cookies 问题
2017/11/20 Javascript
详解Vue打包优化之code spliting
2018/04/09 Javascript
Angular7创建项目、组件、服务以及服务的使用
2019/02/19 Javascript
python中sets模块的用法实例
2014/09/30 Python
Django基于ORM操作数据库的方法详解
2018/03/27 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
Python调用Redis的示例代码
2020/11/24 Python
python 检测图片是否有马赛克
2020/12/01 Python
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
出纳员岗位职责
2014/03/13 职场文书
节能环保演讲稿
2014/08/28 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
咖啡厅里的创业计划书
2019/08/21 职场文书
青年人初次创业的“五不要”
2019/08/23 职场文书
总结Python使用过程中的bug
2021/06/18 Python
MySQL分库分表详情
2021/09/25 MySQL
Python读写yaml文件
2022/03/20 Python
MySQL实现配置主从复制项目实践
2022/03/31 MySQL