javascript之querySelector和querySelectorAll使用說明
更新時間:2011年10月09日 00:09:44 作者:
其實關于querySelector和querySelectorAll的介紹說明很多,在此主要是做個記錄
一開始很多人都會拿jquery的選擇器來跟這兩個api做對比(我也是),比較異同本來沒事,但卻使一些同學對這兩個api在瀏覽器中的實現(xiàn)產(chǎn)生了誤解,特別是再dom element上調(diào)用此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')的實現(xiàn)理解,不少人一開始幾乎都認為是直接從div[id='inner']的孩子中進行查找(我也是),這個#main有點礙眼。實際上它還是根據(jù)selector string從整個document上查找,再返回屬于div[id='inner']的子節(jié)點。很多人會疑惑,那么為什么不按照直接按父節(jié)點找子節(jié)點的方式來實現(xiàn)呢?就像elem.getElementsByTagName,我的想法是靈活selector string吧。
querySelector只返回匹配的第一個元素,如果沒有匹配項,返回null。
querySelectorAll返回匹配的元素集合,如果沒有匹配項,返回空的nodelist(節(jié)點數(shù)組)。
并且返回的結果是靜態(tài)的,之后對document結構的改變不會影響到之前取到的結果。
目前IE8+,ff,chrome都支持此api(IE8中的selector string只支持css2.1的)。
下面是我的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')的實現(xiàn)理解,不少人一開始幾乎都認為是直接從div[id='inner']的孩子中進行查找(我也是),這個#main有點礙眼。實際上它還是根據(jù)selector string從整個document上查找,再返回屬于div[id='inner']的子節(jié)點。很多人會疑惑,那么為什么不按照直接按父節(jié)點找子節(jié)點的方式來實現(xiàn)呢?就像elem.getElementsByTagName,我的想法是靈活selector string吧。
querySelector只返回匹配的第一個元素,如果沒有匹配項,返回null。
querySelectorAll返回匹配的元素集合,如果沒有匹配項,返回空的nodelist(節(jié)點數(shù)組)。
并且返回的結果是靜態(tài)的,之后對document結構的改變不會影響到之前取到的結果。
目前IE8+,ff,chrome都支持此api(IE8中的selector string只支持css2.1的)。
相關文章
js的隱含參數(shù)(arguments,callee,caller)使用方法
本篇文章只要是對js的隱含參數(shù)(arguments,callee,caller)使用方法進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01
JavaScript針對SPA應用的前端優(yōu)化策略概述
前端性能優(yōu)化是Web開發(fā)中非常重要的一環(huán),優(yōu)化能夠有效地提高網(wǎng)站的加載速度和用戶體驗,而對于SPA來說,由于其特殊的加載方式和數(shù)據(jù)交互方式,其優(yōu)化策略也具有一定的特殊性,需要詳細了解可以參考下文2023-05-05
ionic2打包android時gradle無法下載的解決方法
這篇文章主要為大家詳細介紹了ionic2打包android時gradle無法下載的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04

