DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> JavaScript入門知識 >> JavaScript基礎知識 >> querySelector和querySelectorAll選擇器解析
querySelector和querySelectorAll選擇器解析
編輯:JavaScript基礎知識     
jquery寫得多了,原生js大API就容易忘。如果你也是這樣,一起來回顧一下HTML5的類jquery選擇器querySelector和querySelectorAll吧,querySelectorAll這個API有兩個需要注意的點,見下文。

先看看querySelector,語法:

dom.querySelector(selectors)
dom即任意dom元素,selectors是一個css選擇器字符串,什麼是css選擇器字符串?什麼類選擇器、ID選擇器、元素選擇器都是css選擇器字符串

querySelector返回dom的子元素中第一個符合selectors選擇器字符串的元素,無匹配項則返回null

example:

<div id="contani">
<div>
Tencent
</div>
<div>
Alibaba
</div>
</div>
<script>
console.log( document.querySelector('#contani div') )
</script>
結果輸出的是<div>Tencent</div>這個div



querySelectorAll,語法:

dom.querySelectorAll(selectors)


和上面一樣,不同的是它返回的是匹配的所有元素列表,是一個nodeList集合,而且是non-live的

example:(html結構還是和上面一樣)

console.log( document.querySelectorAll('#contani div') )


結果當然是返回了兩個子div

什麼叫non-live?理解為不會實時更新就好了,querySelectorAll匹配的元素有變化時,它的結果也不會實時更新,這是要注意的第一點

example:

<div id="contani">
<div class="child">
Tencent
</div>
<div class="child">
Alibaba
</div>
</div>
<script>
var m = document.querySelectorAll('.child');
var n = document.getElementsByClassName('child');
console.log( 'querySelectorAll: ' + m.length )
console.log( 'getElementsByTagName: ' + n.length )
var newDiv = document.createElement('div');
newDiv.className = 'child';
contani.appendChild(newDiv);
console.log('---------append child---------')
console.log( 'querySelectorAll: ' + m.length )
console.log( 'getElementsByTagName: ' + n.length )
</script>


輸出:

事實證明,js動態創建了一個class為child的div插入到contani容器中,querySelectorAll的結果集並未實時更新,而getElementsByTagName的結果集是live實時更新的。

關於querySelectorAll另外要注意的一點是:當且僅當querySelectorAll的選擇器字符串是‘div div’時(如:dom.querySelectorAll(‘div div’)),它匹配的元素包括了dom,也就是說如果該dom元素和它的子元素構成了div div這種父子結構時,也會被匹配到。

example:

<div class="contani">
<div class="contani">
Qihoo
<div>Safe</div>
</div>
<div class="child">
Tencent
<div>QQ</div>
</div>
<div class="child">
Alibaba
<div>Alipay</div>
</div>
</div>
<div class="child">
Baidu
<div>Family tong</div>
</div>
<script>
console.log( document.querySelectorAll('.contani div div').length )
console.log( document.querySelector('.contani').querySelectorAll('div div').length )
console.log( document.querySelectorAll('div div').length )
</script>
console.log( document.querySelectorAll('.contani div div').length )
console.log( document.querySelector('.contani').querySelectorAll('div div').length )

這兩種匹配結果看似一樣,實際上是不是一樣的呢?結合上文所講,自己先想想結果是多少,然後再戳這裡查看結果驗證自己是否理解了本文所講的內容吧
XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved