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 EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
cookie的复制与使用记住用户名实现代码
Nov 04 Javascript
js通过元素class名字获取元素集合的具体实现
Jan 06 Javascript
js获取下拉列表框中的value和text的值示例代码
Jan 11 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
Aug 03 Javascript
基于javascript实现彩票随机数生成(升级版)
Apr 17 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
Mar 24 jQuery
纯js实现动态时间显示
Sep 07 Javascript
jQuery实现下拉菜单的实例代码
Jun 19 jQuery
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 Javascript
面试题:react和vue的区别分析
Apr 08 Javascript
javascript实现商品图片放大镜
Nov 28 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
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
网页中CDATA标记的说明
2010/09/12 Javascript
Jquery插件之多图片异步上传
2010/10/20 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
js实现的早期滑动门菜单效果代码
2015/08/27 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
2016/12/14 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
mui框架移动开发初体验详解
2017/10/11 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
javascript如何实现create方法
2019/11/04 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[51:29]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第一场 11.05
2020/11/05 DOTA
python获取beautifulphoto随机某图片代码实例
2013/12/18 Python
python集合类型用法分析
2015/04/08 Python
python编程实现希尔排序
2017/04/13 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
详解pyqt5 动画在QThread线程中无法运行问题
2018/05/05 Python
python 提取tuple类型值中json格式的key值方法
2018/12/31 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
Python中的支持向量机SVM的使用(附实例代码)
2019/06/26 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
如何在django中运行scrapy框架
2020/04/22 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
html5 worker 实例(一) 为什么测试不到效果
2013/06/24 HTML / CSS
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
Linux的文件类型
2012/03/07 面试题
物业管理毕业生的自我评价
2014/02/17 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
事业单位年度考核评语
2014/12/31 职场文书