Pour donner un exemple simplifié, j'ai répété le bloc suivant sur la page plusieurs fois (il est généré dynamiquement):
<div class="box">
<div class="something1"></div>
<div class="something2">
<a class="mylink">My link</a>
</div>
</div>
Lorsque je clique dessus, je peux accéder au parent du lien avec:
$(".mylink").click(function() {
$(this).parents(".box").fadeOut("fast");
});
Cependant ... je dois me rendre au <div class="something1">
de ce parent en particulier.
En gros, quelqu'un peut-il me dire comment faire référence à un frère ou une sœur de niveau supérieur sans pouvoir s'y référer directement? Appelons ça grand frère. Une référence directe au nom de classe du grand frère ferait disparaître chaque instance de cet élément sur la page - ce qui n'est pas l'effet souhaité.
J'ai essayé:
parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.
N'importe qui? Merci.
.parent()
pas.parents()
Réponses:
L'appel
.parents(".box .something1")
renverra tous les éléments parents qui correspondent au sélecteur.box .something
. En d'autres termes, il renverra les éléments parents qui sont.something1
et sont à l'intérieur de.box
.Vous devez obtenir les enfants du parent le plus proche, comme ceci:
Ce code appelle
.closest
pour obtenir le parent le plus interne correspondant à un sélecteur, puis appelle.children
cet élément parent pour trouver l'oncle que vous recherchez.la source
parent()
est le mauvais élément..closest(...)
est plus résilient et plus lisible.La traversée des arbres est amusante
Et bien d'autres façons, vous pourriez trouver ces documents utiles.
la source
Cela trouvera le premier parent avec la classe
box
puis trouvera la première classe enfant avec la correspondance regexsomething
et obtiendra l'id.la source
Si j'ai bien compris votre problème,
$(this).parents('.box').children('.something1')
est-ce ce que vous recherchez?la source
Vous pouvez utiliser
.each()
avec.children()
et un sélecteur entre parenthèses:la source