jQuery的:nth-child(n)選擇器用於匹配作為父元素下的第n個(或特定順序的)子元素的元素,將其封裝為jQuery對象並返回。
與該選擇器相對的是:nth-last-child(n)選擇器,用於匹配作為父元素下的倒數第n個(或符合特定倒數順序的)子元素。
注意::nth-child(n)選擇器與:eq(index)選擇器的不同之處在於:
:eq(index)選擇器只匹配一個元素,並且是所有匹配到的元素中的第index + 1個元素(索引index從0開始算起);
:nth-child(n)選擇器則需要判斷匹配到的元素是否是其父元素的第n個子元素或符合其他特定要求(序號n從1開始算起),如果是就保留,否則將被舍棄。
§語法
jQuery1.1.4 新增該選擇器。
// 這里的selector表示具體的選擇器 // 這里的n表示具體的序號或者符合要求的表達式 jQuery( "selector:nth-child(n)" )
§參數
| 參數 | 描述 |
|---|---|
| selector | 一個有效的選擇器。 |
| n | 指定的序號,從1開始計數。 |
參數n一般是一個自然數,表示作為父元素下的第n個子元素。例如::nth-child(2)表示作為父元素的第2個子元素。
參數n也可以為特定的表達式(表達式中只能使用字母n
表示自然數,大小寫均可)。例如:
- :nth-child(odd)表示匹配作為父元素的奇數(第1、3、5、7……個)子元素的元素;
- :nth-child(even)表示匹配作為父元素的偶數(第2、4、6、8……個)子元素的元素;
- :nth-child(3n)表示匹配作為父元素的第
3n個子元素的元素(n表示包括0在內的自然數,下同); - :nth-child(3n+1)表示匹配作為父元素的第
3n+1個子元素的元素; - :nth-child(3n+2)表示匹配作為父元素的第
3n+2個子元素的元素;
§返回值
返回封裝了匹配到的元素的jQuery對象。
如果找不到任何相應的匹配,則返回一個空的jQuery對象。
jQuery先會根據選擇器selector去查找所有匹配的元素,再看它們是否是父元素的符合指定順序的子元素,如果是就保留,否則舍棄掉該元素。
§示例&說明
以下面這段HTML代碼為例:
<div id="n1"> <div id="n2"> <ul id="n3"> <li id="n4" class="c">item1</li> <li id="n5">item2</li> <li id="n6" class="c">item3</li> </ul> </div> <div id="n7"> <ul id="n8"> <li id="n9">item1</li> <li id="n10">item2</li> </ul> </div> </div>
現在,我們想要為每個ul標簽內查找它的第2個li標簽,則可以編寫如下jQuery代碼:
// 選擇了id分別為n5、n10的兩個元素 $("ul li:nth-child(2)");
接着,為每個ul標簽查找自然順序為奇數的li標簽,則可以編寫如下jQuery代碼:
// 選擇了id分別為n4、n6、n9的3個元素 $("ul li:nth-child(odd)");
為每個ul父標簽查找自然順序為3n的li標簽,對應的jQuery代碼如下:
// 選擇了id為n6的一個元素 // 雖然這里用的#n1進行限定,實際上jQuery先是通過查找所有匹配#n1 li的元素,然后再看這些元素是不是父元素的第3n個元素,如果是就保留,否則就舍棄掉。 $("#n1 li:nth-child(3n)");
查找所有包含類名c
的li標簽,並且它們必須是父元素的偶數順序的子元素,我們可以編寫如下jQuery代碼:
// 沒有選擇任何元素,返回空的jQuery對象 // 雖然匹配li.c的有n4、n6兩個元素,但它們都不是父元素的偶數順序的子元素,因此無法匹配 $("li.c:nth-child(even)");
