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.something1y están dentro de.box.Necesita obtener los hijos del padre más cercano, así:
Este código llama
.closestpara que el padre más interno coincida con un selector, luego llama.childrena 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,
boxluego encontrará la primera clase secundaria con coincidencia de expresiones regularessomethingy 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