jquery中的選擇器共分為四大類。其簡單結構如下:
基本選擇器
|-----ID選擇器
|-----類選擇器
|-----元素選擇器
|-----*選擇器
|-----聯合選擇器
層級選擇器
|-----祖先-后代選擇器
|-----父輩-字輩選擇器
|-----同輩選擇器
過濾選擇器
|-----基本過濾選擇器
|-----內容過濾選擇器
|-----可見性過濾選擇器
|-----屬性過濾選擇器
|-----子元素過濾選擇器
|-----表單對象屬性過濾選擇器
表單選擇器
對於jquery選擇器的詳細描述如下:
一. 基本選擇器
1. ID選擇器
$('#idName'):返回一個封裝了指定id的dom元素的jQuery對象。
注:如果有多個相同的id值,則以第一個id為准。若沒有這個id,則返回空的jquery對象
2. 類選擇器(class)
$('.className'):返回封裝了帶有指定css類名的所有DOM元素的jQuery對象,可能有一個或多個。若沒有這個class則返回空jquery對象。
3. 元素選擇器(element)
$('span'):返回封裝了指定標簽名稱的DOM元素的jQuery對象。若沒有這個標簽名稱則返回空jquery對象。
4. *選擇器
$('*'):選擇文檔中的所有元素。
5.聯合選擇器
(′div,p,span′):選擇div,p,span標簽的元素。在這種選擇器中,可以在(′div,p,span′):選擇div,p,span標簽的元素。在這種選擇器中,可以在()中添加多個選擇器,而每個選擇器也可以很復雜,比如:
$('div p:first-child,p>span:nth-child(3),span:not(.one,.two)')等。
二. 層級選擇器
1. 祖先-后代選擇器
$('div p'):查找div中所有后代中的p元素
2. 父輩-子輩選擇器
$('div>p'):查找div中所有的子代中的p元素
3. 同輩選擇器
a. $('h2 + p'):查找和h2相鄰的p元素,並且h2和p必須是同級元素且相鄰的,如
<div> <h2>title</h2> <p>content</p> </div> <p>outer</p> <script> alert($('div+p').text()); </script>
這段代碼的結果是content。
b. $('h2~p'):查找h2后面的所有的p元素,並且h2和p必須是同級元素,但是不需要是相鄰的,如
<div> <p class = 'a'>p1</p> <span>span1</span> <p>p2</p> <span>span2</span> <p>p3</p> <span>span3</span> </div> <script> $(function(){ $('.a+span').text('11111'); }); </script>
這段代碼中查找的是class為a的后面所有的同級的span元素,將其內容改為11111,可見結果是三個span的內容都為11111。
三. 過濾選擇器
1. 基本過濾選擇器
a. 首尾元素選擇器
$('div:first'):查找第一個div元素
$('div:last'):查找最后一個div元素
注:這兩個選擇器值選擇一個元素,因此從上到下只要找到一個符合條件的元素就立即返回
<div> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> <ul> <li>4</li> <li>5</li> <li>6</li> </ul> </div> <script> $(function(){ alert($('ul li:first').html()); }); </script>
上述代碼的結果是第一個ul的第一個li中的1。
b. 非選擇器
$('span:not(#d)'):選擇ID不是d的span元素
注::not()括號內也為選擇器,比如:not(ul li:first-child))或者更加復雜的選擇器都可以組合。
<ul> <li class = 'd'>222</li> <li class = 'd'>222</li> <li class = 'd'>222</li> <li>222</li> <li>222</li> <li class = 'd'>222</li> </ul> <script> $(function(){ $('.d:not(ul>li:first-child):not(ul>li:last-child)').text('111'); }); </script>
這段代碼的結果是第2,3的text為111。
c. 奇偶選擇器
$('div:even'):查找dom中索引值為基數的div元素
注:對於$('div:even')來說,這種選擇方式是不區分父輩還是字輩的,是統一進行索引編號的。但是這種情況基本使用不到的。另外索引值使用0開始的,因為0也算偶數,所以第一個都是被選擇的。
<div class = 'one'>0 -------index = 0 even <div class = 'two'>1 -------index = 1 <div class = 'three'>1.1</div> -------index = 2 even </div> <div class = 'four'>2</div> -------index = 3 </div> <div class = 'five'>3</div> -------index = 4 even <script> $(function(){ $('div:even').each(function(){ alert($(this).text()); }); }); </script>
這段代碼就說明了當出現使用(′div:even′)時的情況,其結果是將class為one,three,five的div的test輸出。但是倘若我們不希望將子類的子類中的元素也進行編碼,只對最外圍的div進行選取,那么選擇器就要改成為父輩−子輩