2009-06-08 11 views
89

J'essaie actuellement de trouver le parent d'un parent d'un élément. J'ai un lien cliqué qui est dans un <td>, et je voudrais obtenir l'objet <tr>.jQuery parent d'un parent

Pourquoi "$ (this) .parent(). Parent()" ne fonctionne pas? Ce qui sera?

Merci,
Brendan

Edit: Il semble une erreur dans ma syntaxe a été rejetant toute la chose. "$ (this) .parent(). parent()" fonctionne en effet, mais je finis par aller avec $ (this) .closest ('tr') "parce que cela semble être la solution la plus efficace

+1

pouvez-vous poster le code afin que nous puissions voir pourquoi votre sélecteur parent ne fonctionne pas? – TStamper

Répondre

213

la meilleure façon serait probablement utiliser closest:

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

Check out the documentation:

les plus proches des œuvres en examinant d'abord l'élément courant pour voir si elle correspond à l'expression spécifiée, le cas échéant, il retourne juste 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é.

+0

Merci .. Son travail vraiment .... –

+0

cela fonctionne comme un charme! – frabiacca

+0

Grand patron ..: p – chhameed

5

cet extrait a joué pour moi dans le passé.

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

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

+0

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

20

Il devrait fonctionner Vous pouvez également essayer $ (this) .parents (tag), où tag est le tag que vous recherchez

Par exemple:

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

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

1

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

+8

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

9

Cela devrait fonctionner ... vous pouvez essayer

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

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

et: l'équation (1) dit trouver le oneth (zéro indexé, de sorte que le second) élément dans la liste

+0

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

5

également essayer

$(this).closest('div.classname').hide(); 
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() est pas toujours la meilleure option spécialement lorsque vous avez même construction d'élément.

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

Vous pouvez faire parent d'un parent et il est très facile:

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

etc.

2

Si vous avez une sorte de id/classe pour le parent, vous pouvez utiliser les parents () mais qui vous donnera tous les parents jusqu'au corps <> sauf si vous filtrez() ou arrêter une autre manière comme

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

Espérons que cela aide quelqu'un :)