Para dar un ejemplo simplificado, tengo el siguiente bloque repetido en la página muchas veces (se genera dinámicamente):
<div class="box">
<div class="something1"></div>
<div class="something2">
<a class="mylink">My link</a>
</div>
</div>
Cuando se hace clic, puedo acceder al padre del enlace con:
$(".mylink").click(function() {
$(this).parents(".box").fadeOut("fast");
});
Sin embargo ... necesito llegar al <div class="something1">
de ese padre en particular.
Básicamente, ¿alguien puede decirme cómo referirme a un hermano de nivel superior sin poder referirme a él directamente? Llamémoslo hermano mayor. Una referencia directa al nombre de la clase del hermano mayor haría que todas las instancias de ese elemento en la página desaparecieran, lo que no es el efecto deseado.
He intentado:
parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.
¿Nadie? Gracias.
.parent()
no es.parents()
Respuestas:
La llamada
.parents(".box .something1")
devolverá todos los elementos principales que coincidan con el selector.box .something
. En otras palabras, devolverá elementos padre que están.something1
y están dentro de.box
.Necesita obtener los hijos del padre más cercano, así:
Este código llama
.closest
para que el padre más interno coincida con un selector, luego llama.children
a ese elemento padre para encontrar al tío que está buscando.fuente
parent()
es el elemento incorrecto..closest(...)
es más resistente y más legible también.Atravesar árboles es divertido
Y de muchas más formas, estos documentos pueden resultarle útiles.
fuente
Esto encontrará el primer padre con clase,
box
luego encontrará la primera clase secundaria con coincidencia de expresiones regularessomething
y obtendrá la identificación.fuente
Si entendí correctamente su problema,
$(this).parents('.box').children('.something1')
¿es esto lo que está buscando?fuente
Puede usar
.each()
con.children()
y un selector entre paréntesis:fuente