335 votes

Comment trouver un parent avec une classe connue en jQuery ?

J'ai un <div> qui a beaucoup d'autres <div> en son sein, chacun à un niveau d'imbrication différent. Plutôt que de donner à chaque enfant <div> un identifiant, je préfère simplement donner à la Racine <div> l'identifiant. Voici un exemple :

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

Si j'écris une fonction dans jQuery pour répondre à la classe d et je veux trouver l'ID de son parent, la classe a comment dois-je faire ?

Je ne peux pas simplement faire $('.a').attr('id'); parce qu'il y a plusieurs classes a s. Je pourrais trouver l'ID de son parent, de son parent et de son parent, mais cela semble mal conçu, lent et pas très polymorphe (je devrais écrire un code différent pour trouver l'ID de la classe c ).

657voto

SLaks Points 391154

En supposant que this es .d vous pouvez écrire

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

El closest méthode renvoie le parent le plus interne de votre élément qui correspond au sélecteur.

68 votes

Notez qu'il n'y a pas de piège : Si l'élément de départ correspond à la requête, vous n'obtenez pas l'élément parent mais le même élément. Ce comportement peut être souhaité ou non. Sinon, je recommande ceci : $(this).parent().closest('.a') ;

2 votes

Très utile. Je faisais toujours $(this).parent().parent().parent().parent() et je savais qu'il y avait une meilleure solution.

45voto

Drew Noakes Points 69288

Passez un sélecteur à l'outil jQuery parents fonction :

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

EDIT Hmm, en fait la réponse de Slaks est supérieure si vous voulez seulement l'ancêtre le plus proche qui correspond à votre sélecteur.

13voto

Amr ElGarhy Points 12696

Vous pouvez utiliser parents() pour obtenir tous les parents avec le sélecteur donné.

Description : Obtenir les ancêtres de chaque dans l'ensemble actuel d'éléments correspondantes, éventuellement filtrées par un sélecteur.

Mais parent() n'obtiendra que le premier parent de l'élément.

Description : Obtenir le parent de chaque dans l'ensemble actuel d'éléments correspondantes, éventuellement filtrées par un sélecteur.

jQuery parent() vs. parents()

Et il y a .parentsUntil() ce qui, je pense, sera le meilleur.

Description : Obtenir les ancêtres de chaque dans l'ensemble actuel d'éléments correspondantes, jusqu'à mais sans inclure l'élément correspondant au sélecteur.

0 votes

Il veut seulement un simple parent, il devrait donc appeler closest .

12voto

Anjana Silva Points 391

Extrait des commentaires de @Resord ci-dessus. Celui-ci a fonctionné pour moi et correspond mieux à la question.

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

Gracias

10voto

Huy Points 51
<div id="412412412" class="input-group date">
     <div class="input-group-prepend">
          <button class="btn btn-danger" type="button">Button Click</button>
          <input type="text" class="form-control" value="">
      </div>
</div>

Dans ma situation, j'utilise ce code :

$(this).parent().closest('.date').attr('id')

J'espère que cela aidera quelqu'un.

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