2010-11-16 6 views
7

Nie mogę znaleźć sposobu na wybór n-tego elementu, ostatniego elementu lub pierwszego elementu w przypadkach, gdy nie znam elementu nadrzędnego. nth-child istnieje, ale tylko dla dzieci, na przykład:Jak mogę wybrać n-ty dziecko bez znajomości elementu nadrzędnego?

<div> 
    <p>One</p> 
    <p>Two</p> 
</div> 

p:last-child wybiera paragraf „dwa”, a p:first-child wybiera „jeden” akapit. Ale co z tym, że mam kod dynamiczny i nie mam pojęcia, czym jest nazwa rodzica, a nawet czym naprawdę jest rodzic (może to być div, span, anchor, ul, itp.)?

Na przykład:

<youdontknowwhat!> 
    <p class="select-me">One</p> 
    <p class="select-me">Two</p> 
</youdontknowwhat!> 

Jak wybrać tutaj akapit drugi? (Jestem w stanie wybrać youdontknowwhat! ponieważ ja naprawdę nie wiem, co to jest elementem (to tylko hipotetyczne nazwa).

Dlaczego istnieją first-child, last-child i nth-child selektorów i nr :first, :last, :nth (jak .select-me:first)?

+0

Jak ': first' być różny od': pierwszej child'? Każdy element HTML jest dzieckiem jakiegoś innego elementu w DOM z wyjątkiem '' który jest elementem głównym. – BoltClock

+1

To dlatego, że nie znasz elementu nadrzędnego. – fomicz

+0

"Dlaczego nie: pierwszy, ostatni i: n selektory". Dokładnie! A CZEMU DO LICHA NIE? –

Odpowiedz

27

Jak by :first różni się od :first-child? Każdy element HTML jest dzieckiem innego elementu w DOM z wyjątkiem <html>, który jest elementem głównym. - BoltClock

To dlatego, że nie znasz elementu nadrzędnego. - fomicz

Nie trzeba znać elementu nadrzędnego dla :first-child lub :nth-child() do pracy. Po prostu będą działać, nawet jeśli nie określisz elementu nadrzędnego.

Poniższy selektor jest gwarantowane, aby dopasować dowolny odpowiedni .select-me elementu niezależnie od jego elementem dominującym jest:

.select-me:nth-child(2) 
+0

Dziękuję bardzo! Wszystko jasne już teraz! – fomicz

4
* p:nth-child(2) 

oczywiście lepiej, jeśli można określić selektor nadrzędnego (na gruncie wydajności)

+0

Czy to nie garnek dla dziecka P, a nie samo p? Na przykład co jeśli mam ? Czy * img: nth-child (2) również działa? – fomicz

+0

Tak, jeśli masz co najmniej dwa obrazy w elemencie nadrzędnym ... –

+0

@fomicz: Nie rozumiesz selektorów '* -child'. Zobacz moją odpowiedź. – BoltClock

Powiązane problemy