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 相关文章推荐
调整小数的格式保留小数点后两位
May 14 Javascript
Javascript实现检测客户端类型代码封包
Dec 03 Javascript
JavaScript操作class和style样式代码详解
Feb 13 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
May 12 Javascript
jQuery EasyUI编辑DataGrid用combobox实现多级联动
Aug 29 Javascript
JavaScript中的toString()和toLocaleString()方法的区别
Feb 15 Javascript
基于react框架使用的一些细节要点的思考
May 31 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
Jan 29 Javascript
layui实现鼠标移动到单元格上显示数据的方法
Sep 11 Javascript
js+springMVC 提交数组数据到后台的实例
Sep 21 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
Apr 11 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
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
PHP获取youku视频真实flv文件地址的方法
2014/12/23 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
JS继承 笔记
2011/07/13 Javascript
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
Vue.js实战之组件的进阶
2017/04/04 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
VUE2.0+Element-UI+Echarts封装的组件实例
2018/03/02 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
详解微信小程序之一键复制到剪切板
2019/04/24 Javascript
js canvas实现星空连线背景特效
2019/11/01 Javascript
python修改注册表终止360进程实例
2014/10/13 Python
python中abs&amp;map&amp;reduce简介
2018/02/20 Python
python梯度下降法的简单示例
2018/08/31 Python
python 随机生成10位数密码的实现代码
2019/06/27 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
Under Armour安德玛德国官网:美国高端运动科技品牌
2019/03/09 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
《与朱元思书》的教学反思
2014/04/17 职场文书
学风建设演讲稿
2014/09/12 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
教师先进事迹材料
2014/12/16 职场文书
法律意见书范本
2015/06/04 职场文书
运动会800米赞词
2015/07/22 职场文书
开学第一天的感想
2015/08/10 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Golang 实现超大文件读取的两种方法
2021/04/27 Golang
一文简单了解MySQL前缀索引
2022/04/03 MySQL