jQuery parent d'un parent


93

J'essaye actuellement de trouver le parent d'un parent d'un élément. J'ai cliqué sur un lien qui se trouve dans un <td>, et j'aimerais obtenir l' <tr>objet.

Pourquoi "$ (this) .parent (). Parent ()" ne fonctionnera-t-il pas? Ce qui sera?

Merci,
Brendan

Edit: Il semble qu'une erreur dans ma syntaxe a tout gâché. "$ (this) .parent (). parent ()" fonctionne en fait, mais j'ai fini par utiliser $ (this) .closest ('tr') "parce que cela semble être la solution la plus efficace.


1
pourriez-vous publier le code afin que nous puissions voir pourquoi votre sélecteur parent ne fonctionne pas?
TStamper

Réponses:


221

La meilleure façon serait probablement d'utiliser closest:

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

Consultez la documentation :

Closest fonctionne en regardant d'abord l'élément actuel pour voir s'il correspond à l'expression spécifiée, si c'est le cas, il renvoie simplement l'élément lui-même. S'il ne correspond pas, il continuera à parcourir le document, parent par parent, jusqu'à ce qu'un élément correspondant à l'expression spécifiée soit trouvé. Si aucun élément correspondant n'est trouvé, aucun ne sera renvoyé.


20

Cela devrait marcher. Vous pouvez également essayer $ (this) .parents (tag), où tag est le tag que vous souhaitez trouver.

Par exemple:

$(this).parents("tr:first")

Trouvera le tr le plus proche "en haut de la chaîne".


9

Cela devrait fonctionner ... vous pourriez essayer

$(this).parents(':eq(1)');

Le .parents (sélecteur) dit obtenir tous les ancêtres qui correspondent au sélecteur

et le: eq (1) dit trouver le oneth (indexé à zéro, donc le deuxième) élément dans la liste


Vous pouvez essayer d'alerter ceci, pour vous assurer qu'il s'agit d'une balise d'ancrage HTML. Essayez de faire: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

Cet extrait a joué pour moi dans le passé:

$(this).parent().parent(); 

Postez un code pour nous pour voir s'il pourrait y avoir un autre problème quelque part ...


Je suis d'accord avec ça. Je peux utiliser $(this).parent().parent()sans problème
DrewT

5

Essayez aussi

$(this).closest('div.classname').hide();

2

Si vous avez une sorte d'identifiant / classe pour le parent, vous pouvez utiliser parents () mais cela vous donnera tous les parents jusqu'au <corps> à moins que vous ne filtriez () ou que vous l'arrêtiez d'une autre manière comme

$(this).parents('.myClass');

J'espère que cela aide quelqu'un :)


1

Essayez d'encapsuler $ (this) .parent () dans un objet jQuery comme $ ($ (this) .parent ()) Je trouve souvent le besoin de le faire pour m'assurer que j'ai un objet jquery valide. De là, vous devriez être en mesure de mettre la main sur le parent des parents, ou en utilisant peut-être le prev ().


8
C'est complètement inutile. Tout ce que vous faites est de perdre du temps en créant un autre objet jQuery ...
James

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

0

.closest() n'est pas toujours la meilleure option, spécialement lorsque vous avez la même construction d'élément.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Vous pouvez faire parent d'un parent et c'est très simple:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

etc.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.