使用jQuery可以方便的選擇文件中的元素,它的核心就是通過CSS選擇符查詢DOM文件取得元素的引用,從而拋開getElementById()和getElementsByTagName().
Selector API讓瀏覽器原生支援這些功能,解析和查詢文件的操作可以在瀏覽器內部完成,可以極大的改善效能。
Selector API Level 1的核心是兩個方法:querySelector()和querySelectorAll(),在相容的瀏覽器中,可以通過Document 和Element型別的例項呼叫它們。目前 已完 全 支援 Selectors API Level 1 的 瀏覽器 有 IE 8+、 Firefox 3. 5+、 Safari 3. 1+、 Chrome 和 Opera 10+。
querySelector()方法接收一個css選擇符,返回與該模式匹配度額第一個元素,如果沒有找到匹配的元素,返回null.
//取得body元素
var body = document.quertSelector('body');
//取得ID為‘myDiv’的元素
var myDiv = document.querySelector('#myDiv');
//取得類為'selected'的第一個元素
var selected = document.querySelector('.selected');
//取得類為'button'的第一個影象元素
var img = document.querySelector('img.button');
複製程式碼
通過Document型別呼叫querySelector()方法時,會在文件範圍沒查詢,而通過Element型別呼叫時,只會在該元素的後代範圍內查詢。如果傳入的引數不被支援,該方法會丟擲錯誤。
querySelectorAll()方法接收一個css選擇符,返回一個NodeList的例項(類陣列物件),該例項包含所有匹配的元素,返回的內容不是對文件進行動態搜尋的結果,而是類似一組元素的快照,如果文件中沒有匹配的元素,返回空的NodeList。
能夠呼叫querySelector()方法的型別包括Document,DocumentFragment和Element.
//取得所有類為'selected'的所有元素
var selecteds = document.querySelectorAll('.selected');
複製程式碼
如果要遍歷返回的NodeList中的每一個元素,可以使用item()方法或者方括號語法。 如果傳入的選擇符有錯誤或者不被支援,該方法同樣會丟擲錯誤。
Selector API Level2規範為Element型別新增了一個matchesSelector()方法。該方法接收一個css選擇符作為引數,如果呼叫該方法的元素與該選擇符匹配,返回true,否則返回false.
在取得某個元素的引用的情況下,使用該方法能夠方便的檢測它是否能被querySelector()和querySelectorAll()方法返回。
截止到現在,Firefox和chrome並未實現該方法,但是,Firefox提供了mozMatchesSelector()支援該方法,Safari 5+ 和Chrome通過webkitMatchesSelector()支援該方法。這裡有一個包裝函式可以更好的使用該方法:
function matchesSelector(element,selector){
if(element.matchesSelector){
return element.matchesSelector(selector);
} else if(element.msMatchesSelector){
return element.msMatchesSelector(selector);
} else if(element.mozMatchesSelector){
return element.mozMatchesSelector(selector);
} else if(element.webkitMatchesSelector) {
return element.webkitMatchesSelector(selector);
} else{
return new Error('Not supported.');
}
}
複製程式碼
本文為JS高程讀後感