2010-06-14 24 views
7

Me gustaría obtener el # de hijos inmediatos que tiene un elemento, y luego obtener la clase de un niño en un índice en particular. Algo así como:Cómo acceder al elemento hijo fuera de los elementos secundarios()?

var index = 25; 
var children = $("#myListElement").children(); 
if (index < children.length) { 
    if (children[index].hasClass("testClass")) { 
     alert("hi!"); 
    } 
} 

creo que la sintaxis para .children() está bien, pero ¿cómo puedo obtener el elemento indexado de ellos en estilo jQuery?

Gracias

Respuesta

11

El método children devuelve un objeto array-como que contiene nodos DOM de fricción. Debe envolver un elemento contenido con jQuery o recuperarlo utilizando el método eq(index) para poder usar métodos jQuery como hasClass en él.

if ($(children[index]).hasClass("testClass")) 

jQuery no los envuelve por defecto por obvias razones de rendimiento.

Si está utilizando Firebug o las herramientas para desarrolladores de Chrome/Webkit, obtendrá una excepción al intentar llamar a un método indefinido en un objeto. Ver example. Asegúrese de estar viendo la salida de la consola :)

TypeError: Object #<an HTMLLIElement> has no method 'hasClass' 
+4

"hijos contiene un conjunto de nodos DOM de civil" esto es engañoso. 'children()' es un jQuery configurado como cualquier otra cosa. Si usa '.eq (3)' en lugar de '[3]' devolvería un elemento DOM envuelto jQuery como se esperaba. Cualquier conjunto de resultados jQuery, cuando se accede con '[]' devuelve un elemento DOM. –

+0

Básicamente 'children.eq (index) .hasClass (" testClass ")' es cómo debe escribirse su respuesta. –

+0

@Doug - La instrucción "contiene una matriz de nodos DOM simples" no es del todo correcta. jQuery devuelve un objeto * tipo-matriz * que contiene nodos DOM indexados por número como en una matriz. Además, corrígeme si me equivoco, pero ¿no hubo un momento en el que jQuery envolvió todos los nodos DOM de manera predeterminada antes de que cayera a favor del rendimiento? – Anurag

2

Lo siento, pero encontré su pregunta algo confusa. ¿Es esto lo que quieres?

var parent = $("#myitem"), 
    count = parent.children().length, 
    index = parent.children(".theClass").index(); 

Eso obtiene el índice secundario del elemento con una clase específica, no es necesario un bucle.

Sin embargo, si necesita la clase (Pero ya tienen el índice) y luego hacer esto:

var parent = $("#myitem"), 
    count = parent.children().length, 
    classN = parent.children()[3].className; 
+1

Creo que su segunda respuesta es qué OP está buscando. – user113716

+0

@patrick Cool. Creí haber entendido la pregunta, pero el ejemplo del código me confundió :) –

0

uso eq():

if (children.eq(index).hasClass("testClass")) 
+0

¿Qué hacer, simplemente puedo proporcionar varios nombres de clases en hasClass() para probar al mismo tiempo? Al igual que .hasClass ("caballo de cabra")? – user291701

Cuestiones relacionadas