2011-03-17 16 views
163

Tengo un <div> que tiene muchos otros <div> s dentro de él, cada uno en un nivel de anidación diferente. En lugar de dar a cada niño <div> un identificador, prefiero dar el <div> raíz el identificador. He aquí un ejemplo:¿Cómo encontrar un padre con una clase conocida en jQuery?

<div class="a" id="a5"> 
    <div class="b"> 
    <div class="c"> 
     <a class="d"> 
     </a> 
    </div> 
    </div> 
</div> 

Si escribo una función en jQuery para responder a la clase d y quiero encontrar el ID de su matriz, clase a, ¿cómo voy a hacer esto? No puedo simplemente hacer $('.a').attr('id'); porque hay varias clases a s. Pude encontrar la identificación de los padres de los padres de los padres, pero parece tener un diseño deficiente, lento y poco polimórfico (tendría que escribir un código diferente para encontrar el ID para la clase c).

Respuesta

334

Suponiendo que this es .d, puede escribir

$(this).closest('.a'); 

El closest method Devuelve el elemento principal más interior de su elemento que coincide con el selector.

+0

http://api.jquery.com/closest/ –

+30

Tenga en cuenta que hay un pequeño inconveniente: si el elemento inicial coincide con la consulta, no se obtiene el elemento padre sino el mismo elemento. Esto puede o no ser un comportamiento deseado. Si no, lo recomiendo: $ (this) .parent(). Closest ('.un'); – user766304

+1

Muy útil. Siempre solía hacer $ (esto) .parent(). Parent(). Parent() y sabía que había una mejor solución. –

13

pasa un selector en la función jQuery parents:

d.parents('.a').attr('id') 

EDITAR Hmm, en realidad la respuesta de Slaks es superior si sólo desea que el ancestro más cercano que coincida con su selector.

+1

No es un padre directo. – SLaks

+1

@Slaks, tienes razón. Actualizado de 'parent' a' parents'. –

4

Puede obtener parents() para obtener todos los padres con el selector dado.

Descripción: Obtener los ancestros de cada elemento en el conjunto actual de emparejados elementos, opcionalmente filtrados por un selector .

Pero parent() obtendrá solo el primer elemento primario del elemento.

Descripción: Obtener el padre de cada elemento en el conjunto actual de emparejados elementos, opcionalmente filtrados por un selector .

jQuery parent() vs. parents()

Y hay .parentsUntil() que creo que va a ser el mejor.

Descripción: Obtener los ancestros de cada elemento en el actual conjunto de elementos emparejados , hasta, pero sin incluir el elemento emparejado por el selector.

+0

Solo quiere un _soldado_padre, por lo que debe llamar al 'más cercano'. – SLaks

+1

Gracias, para la corrección, voy a dejar mi respuesta aquí para que la gente sepa la diferencia y entienda de mi error. –

Cuestiones relacionadas