41 votes

jQuery test si element1 est le descendant de element2

Est-ce que quelqu'un connaît un bon moyen de tester si un élément, stocké dans un var, est le descendant d'un autre, également stocké dans un var?

Je n'ai pas besoin de element1.isChildOf('selector') , c'est facile.
J'ai besoin de element1.isChildOf(element2)

element2.find(element1).size() > 0 Ne semble pas fonctionner.

Je ne veux pas avoir à écrire un plugin qui utilise .each pour tester chaque enfant si je peux l'éviter.

72voto

Max Shawabkeh Points 19030

Si vous utilisez la version 1.4 et que vous recherchez un descendant plutôt qu'un enfant, comme l'indique votre exemple find() , il existe une méthode has() :

 element2.has(element1).length > 0
 

7voto

cletus Points 276888

Vous pouvez utiliser index() pour cela. Il retournera -1 si un élément n'est pas dans l'ensemble. En supposant que element1 et element2 sont des éléments DOM et non des objets jQuery:

 if ($(element2).children().index(element1) != -1) {
  // it's a child
}
 

Pour être complet, tester si quelque chose est un descendant et pas seulement un enfant, il peut également être utilisé pour cela aussi:

 if ($(element1).parents().index(element2) != -1) {
  // element1 is a descendant of element2
}
 

6voto

DonamiteIsTnt Points 5121

A partir de Jquery 1.6, vous pouvez déterminer si un objet jquery est un enfant d'un autre objet jquery de cette façon:

 element2.is(element1.children());
 

Il faut aussi noter que, puisque is() accepte maintenant plusieurs arguments différents (le premier argument peut être une fonction, un sélecteur jQuery ou un élément DOM), vous ne pouvez plus le considérer comme simplement "est", mais plutôt "est ou est dans".

1voto

JustinBull Points 1148

Je sais que ce fil est vieux mais cela fonctionne aussi si vous voulez vérifier vers le haut et non vers le bas:

 function isElementChildOf(childElement, parentElement) {
    return 0 !== $(childElement).parents(parentElement).length;
}
 

Voici un exemple de travail

1voto

2astalavista Points 7092

Ceci est true si element1 est l'enfant de element2, autrement dit element1 a un parent, c'est element2

 $(element1).parents(element2).length 
 

de cette façon, ce n’est pas correct si le parent a plus d’enfants ( disons qu’ils sont input ):

 $(element2).children(element1).length 
 

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