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 RadioButtonList获取选中值
Apr 09 Javascript
jQuery学习2 选择器的使用说明
Feb 07 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
JS访问SWF的函数用法实例
Jul 01 Javascript
学习JavaScript设计模式之代理模式
Jan 12 Javascript
JS如何生成一个不重复的ID的函数
Dec 25 Javascript
深入解析Vue 组件命名那些事
Jul 18 Javascript
vue加载自定义的js文件方法
Mar 13 Javascript
Bootstrap Table列宽拖动的方法
Aug 15 Javascript
vue单文件组件lint error自动fix与styleLint报错自动fix详解
Jan 08 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
Aug 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中文本数据翻页(留言本翻页)
2006/10/09 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
PHP导入导出Excel代码
2015/07/07 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
php接口技术实例详解
2016/12/07 PHP
循环 vs 递归浅谈
2013/02/28 Javascript
js控制页面控件隐藏显示的两种方法介绍
2013/10/09 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jquery实现图片切换代码
2016/10/13 Javascript
Vue使用json-server进行后端数据模拟功能
2018/04/17 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
使用python将mdb数据库文件导入postgresql数据库示例
2014/02/17 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python网络编程 Python套接字编程
2017/09/13 Python
Python读写锁实现实现代码解析
2020/11/28 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
Java的五个基础面试题
2016/02/26 面试题
小车司机岗位职责
2013/11/25 职场文书
社会学专业求职信
2014/02/24 职场文书
2014年党员整改措施
2014/10/24 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
房产证明范本
2015/06/19 职场文书
2016年度创先争优活动总结
2016/04/05 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript