91 votes

jQuery: Comment obtenir un enfant en particulier d'un parent?

Pour donner un exemple simplifié, j'ai le bloc suivant répété sur la page des tas de 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 l'utilisateur clique dessus, je peux obtenir le parent le lien:

$(".mylink").click(function() {
   $(this).parents(".box").fadeOut("fast");
});

Cependant... j'ai besoin d'obtenir de l' <div class="something1"> de ce parent.

En gros, quelqu'un peut me dire comment faire référence à un niveau supérieur de la fratrie, sans être en mesure de s'y référer directement? Appelons-le grand frère. Une référence directe à un grand frère du nom de la classe serait la cause de chaque occurrence de l'élément sur la page de la fermeture de ce qui n'est pas l'effet désiré.

J'ai essayé:

parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.

N'importe qui? Merci.

138voto

SLaks Points 391154

Appelant .parents(".box .something1") sera de retour tous les éléments parents qui correspondent au sélecteur .box .something. En d'autres termes, il sera de retour parent éléments qui sont à l' .something1 et sont à l'intérieur de l' .box.

Vous avez besoin d'obtenir les enfants du parent le plus proche, comme ceci:

$(this).closest('.box').children('.something1')

Ce code appelle .closest d'obtenir au plus profond du parent correspondant à un sélecteur, puis appelle .children sur cet élément parent pour trouver l'oncle vous êtes à la recherche pour.

17voto

Anurag Points 66470
$(this).parent()

L'arbre transversal est amusant

$(this).parent().siblings(".something1");

$(this).parent().prev(); // if you always want the parent's previous sibling

$(this).parents(".box").children(".something1");

Et beaucoup plus de moyens, vous pourriez trouver ces docs utiles.

13voto

user2601995 Points 641

Cela permettra de trouver le premier parent avec la classe box puis de trouver le premier enfant de la classe avec la regex correspondance something et obtenir l'id.

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")

6voto

Teja Kantamneni Points 9112

Si j'ai bien compris votre problème correctement, $(this).parents('.box').children('.something1') Est-ce ce que vous recherchez?

4voto

Olly Points 11

Vous pouvez utiliser .each() avec .children() et un sélecteur à l'intérieur de la parenthèse:

//Grab Each Instance of Box.
$(".box").each(function(i){

    //For Each Instance, grab a child called .something1. Fade It Out.
    $(this).children(".something1").fadeOut();
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X