是否有辦法選擇與任意選擇器相符(或不符)的第 n 個子元素?例如,我想選擇每個奇數表行,但在行的子集中:
table.myClass tr.row:nth-child(odd) { ... }
<table class="myClass"> <tr> <td>Row <tr class="row"> <!-- I want this --> <td>Row <tr class="row"> <td>Row <tr class="row"> <!-- And this --> <td>Row </table>
但是:nth-child()
似乎只是計算所有tr
元素,無論它們是否屬於「row」類,所以我最終得到了一個even 「行」元素而不是我正在尋找的兩個元素。 :nth-of-type()
也會發生同樣的情況。
誰能解釋一下為什麼嗎?
P粉7878203962023-10-21 15:03:35
不是真的..
#它是它自己的選擇器,不與類別結合。在您的規則中,它只需同時滿足兩個選擇器,因此如果 :nth-child(even)
表行也恰好具有 .row代码> 類別。
P粉7648364482023-10-21 11:14:12
這是一個非常常見的問題,由於對:nth-child(An B)
和:nth-of-type()
工作原理的誤解而出現.
在第 3 級選擇器中,:nth-child ()
偽類別 對同一父級下的所有同級元素進行計數。它不只計算與選擇器其餘部分相符的同級。
同樣,:nth-of- type()
偽類別 計算共享相同元素類型的兄弟元素,該元素類型引用HTML 中的標籤名稱,而不是選擇器的其餘部分。
這也意味著,如果同一父級的所有子級都具有相同的元素類型,例如,表體的唯一子級是tr
元素,或者列表元素的唯一子級是子元素是li 元素,那麼:nth-child()
和:nth-of-type()
將表現相同,即對於每個值An B、:nth -child(An B)
和:nth-of-type(An B)
將符合同一組元素。 p>
事實上,給定複合選擇器中的所有簡單選擇器(包括偽類,例如:nth-child()
和:not()
)都可以工作彼此獨立,而不是查看與選擇器其餘部分相符的元素子集。
這也意味著每個單獨的複合選擇器中的簡單選擇器之間沒有順序概念1,這意味著例如以下兩個選擇器是等效的: p>
table.myClass tr.row:nth-child(odd) table.myClass tr:nth-child(odd).row
翻譯成英文,它們的意思都是:
(你會注意到我在這裡使用了無序列表,只是為了讓大家明白這一點)
#選擇器等級4 試圖透過允許 來修正此限制:nth-child(An B of S)
2 接受任意選擇器參數S,同樣是由於複合選擇器中選擇器如何彼此獨立地操作,如下所示由現有選擇器語法決定。所以在你的情況下,它看起來像這樣:
table.myClass tr:nth-child(odd of .row)