javascript之querySelector和querySelectorAll使用说明

 更新时间:2011年10月09日 00:09:44   作者:  
其实关于querySelector和querySelectorAll的介绍说明很多,在此主要是做个记录
一开始很多人都会拿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的)。

相关文章

  • JS+DIV实现的卷帘效果示例

    JS+DIV实现的卷帘效果示例

    这篇文章主要介绍了JS+DIV实现的卷帘效果,结合具体实例形式对比分析了javascript响应鼠标事件动态操作页面元素属性实现展开与折叠效果的相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • js获取页面description的方法

    js获取页面description的方法

    这篇文章主要介绍了js获取页面description的方法,涉及javascript操作页面元素的相关技巧,需要的朋友可以参考下
    2015-05-05
  • 使用JavaScriptCore实现OC和JS交互详解

    使用JavaScriptCore实现OC和JS交互详解

    JavaScriptCore是webkit的一个重要组成部分,主要是对JS进行解析和提供执行环境。下面这篇文章主要给大家介绍了使用JavaScriptCore实现OC和JS交互的相关资料,文中介绍的非常详细,需要的朋友可以参考学习,下面来一起看看吧。
    2017-03-03
  • js判断出两个字符串最大子串的函数实现方法

    js判断出两个字符串最大子串的函数实现方法

    下面小编就为大家带来一篇js判断出两个字符串最大子串的函数实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-11-11
  • JS把年月日转为时间戳的操作方法

    JS把年月日转为时间戳的操作方法

    在JavaScript中,将年月日转换为时间戳可以通过多种方式实现,下面给大家分享JS把年月日转为时间戳的操作方法,感兴趣的朋友跟随小编一起看看吧
    2024-08-08
  • js 获取计算后的样式写法及注意事项

    js 获取计算后的样式写法及注意事项

    复合样式:currentStyle;注意在获取复合样式时要单独写,不能写background,接下来将详细介绍下实现方法,感兴趣的你可不要错过了哈
    2013-02-02
  • JS实现简单可拖动的模态框

    JS实现简单可拖动的模态框

    这篇文章主要为大家详细介绍了JS实现简单可拖动的模态框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • 让微信小程序支持ES6中Promise特性的方法详解

    让微信小程序支持ES6中Promise特性的方法详解

    微信更新自家的Web开发工具后无法使用原生 Promise,下面这篇教程教你引入第三方库来使用 Promise,文中通过图文介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • JavaScript中transform实现数字翻页效果

    JavaScript中transform实现数字翻页效果

    本文主要介绍JavaScript中利用transform实现数字翻页效果的实例,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • js中arguments,caller,callee,apply的用法小结

    js中arguments,caller,callee,apply的用法小结

    本篇文章只要是对js中arguments,caller,callee,apply的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01

最新评论