2010-04-20 7 views
36

J'essaie de récupérer le parent d'un parent d'un élément> (grandparent?) <. Je veux trouver ce grand-parent, puis trouver une balise < b> dans cet élément, puis stocker ce texte en tant que variable à publier ailleurs sur la page. J'ai essayé d'utiliser la fonction parent() mais sans succès.jQuery - Obtention du parent de second niveau d'un élément

Voici le code que j'ai essayé:

$('.mixPlayCell a').click(function() { 
     var title = $(this).parent().get(0).parent().get(0).text(); 
     alert(title); 
    }); 
+0

Je ne comprends pas ce que pensent '.get()' fait. –

+4

Je ne le fais certainement pas. Tout ce que je fais dans jQuery est de deviner et de vérifier ... Pourriez-vous élaborer? –

+0

Parce que 'parent()' renvoie une collection avec un seul élément, vous pouvez appeler directement la fonction suivante. Le 'get (0)' est implicite. –

Répondre

37

essayer:

$(this).parent().parent().find('.thingtofind').text(); 
+0

Je pensais déjà essayé, mais je suppose que non! Fonctionne très bien, merci. –

+1

Regardez [link] http://stackoverflow.com/questions/1108971/jquery-parent-select-more-efficace-way pour une approche plus rapide et plus élégante en utilisant .parent(). Parent() .... – dzona

2
$('.mixPlayCell a').click(function() { 
    elem = $(this).parent().parent(); 
    title = $("tag selector goes here",elem).html(); 
}); 

Quelque chose comme ça?

+0

+1, .get (0) est inutile et renvoie l'objet DOM, qui n'a pas les méthodes jQuery. [Voir ici] (http://static.bwerp.net/~adam/2010/04/20/parent.html). –

0
$(this).parent().parent().find('mytag').text() 

Cela devrait fonctionner correctement.

Vous pouvez utiliser n'importe quel sélecteur dans la méthode find. Si vous avez juste besoin de rechercher dans les enfants directs de l'élément des grands-parents, vous pouvez également utiliser $.children au lieu de find qui recherche dans tous les enfants de l'élément.

1

Il y a seulement 1 parent, pas besoin de .get (0)

var title = $(this).parent().parent().find("whateveryouwant").html(); 
46

Pour sélectionner un second parent

parents(':eq(1)') 

est plus lisse que

parent().parent() 

En outre, vous pourrait trouver que

closest('ul') 

correspond mieux au travail.

-1

Essayez cette mise en œuvre simple:

$('.mixPlayCell a').click(function() { 
    var title = $(this).parents().text(); 
    alert(title); 
}); 

Juste .parent changé() avec un .parents()

c'est fonctionne pour chaque version jQuery.

5

parents() retourne une liste, donc cela fonctionne:

$(this).parents()[1]; 
Questions connexes