2010-11-16 8 views
7

No puedo encontrar una manera de seleccionar el enésimo elemento, el último elemento o el primer elemento en los casos en que no conozco el elemento principal. nth-child existe, pero sólo para los niños, por ejemplo:¿Cómo puedo seleccionar un enésimo hijo sin conocer el elemento padre?

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

p:last-child selecciona el párrafo "Dos", y p:first-child selecciona el "Uno" párrafo. Pero, ¿qué pasa cuando tengo un código dinámico y no tengo idea de cuál es el nombre principal, o incluso qué es realmente el padre (puede ser un div, span, ancla, ul, etc.)?

Por ejemplo:

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

¿Cómo selecciono el segundo párrafo aquí? (Soy incapaz de seleccionar youdontknowwhat! ya que realmente no sé qué elemento es (es sólo un nombre hipotético).

¿Por qué hay first-child, last-child y nth-child selectores y NO :first, :last, :nth (como .select-me:first)?

+0

¿Cómo ': first' ser diferente de': primera child'? Cada elemento HTML es hijo de algún otro elemento en el DOM excepto '' que es el elemento raíz. – BoltClock

+1

Sería porque no conoce el elemento principal. – fomicz

+0

"Por qué no: primero,: último y: enésimo selector". ¡Exactamente! ¿PORQUE DIABLOS NO? –

Respuesta

27

Cómo haría :first ser diferente de :first-child? Cada elemento HTML es hijo de algún otro elemento en el DOM excepto <html> que es el elemento raíz. - BoltClock

Sería porque no conoce el elemento primario. - fomicz

No es necesario saber el elemento padre de :first-child o :nth-child() para trabajar. Simplemente funcionarán, incluso si no especifica el elemento principal.

El siguiente selector está garantizada para adaptarse a cualquier elemento apropiado .select-me independientemente de lo que es su elemento padre:

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

¡Muchas gracias! Todo despejado ahora! – fomicz

4
* p:nth-child(2) 

por supuesto que es mejor si se puede especificar el selector de matriz (por una cuestión de rendimiento)

+0

¿No le está yendo al niño de p, no al p? Por ejemplo, ¿qué pasa si tengo ? Will * img: nth-child (2) también funciona? – fomicz

+0

sí, si tiene al menos dos imágenes en un elemento primario ... –

+0

@fomicz: No está entendiendo los selectores '* -child'. Ver mi respuesta – BoltClock

Cuestiones relacionadas