2010-03-29 4 views
2

j'ai un balisage qui ressemble à ceci:jquery: comment trouver un élément qui vient 2 éléments avant élément courant

<h3>Paragraf3-dummytext</h3> 
<p> 
<a name="paragraf3"> 
Quisque id odio. Praesent venenatis metus at tortor pulvinar varius. Lorem ipsum dolor sit 
</a> 
</p> 

ce que je veux faire est de trouver tous « un » tags avec « nom 'Attribuer et trouver la balise' h3 'pour cette ancre; im essayant de le faire comme ceci:

var paragraf = []; 
var paragrafheading = []; 
$('a[name]').each(function() { 
paragraf.push($(this).attr('name')); 
paragrafheading.push($(this).prev().text()); 

mais il ne fonctionne pas parce qu'il ya une balise « p » autour du texte.

Répondre

1

Vous pouvez faire:

paragrafheading.push($(this).parent().prev().text()); 

S'il n'y a pas toujours le paragraphe autour de la une, ou vous ne savez pas combien de parents l'ancre peut avoir avant la h3, vous pouvez faire quelque chose comme ceci:

paragrafheading.push($(this).closest('> h3').find('> h3').text()); 
+0

Cela a fonctionné parfaitement !!! Merci beaucoup! – ilkin

+0

votre deuxième solution fonctionne très bien jusqu'à ce que je mette une balise «b» autour de la balise «a». Aucune suggestion? – ilkin

0

Vous ne savez pas si c'est le meilleur moyen, mais pouvez-vous faire chacun() sur les h3 jusqu'à ce que vous trouviez celui qui contient la balise 'a' que vous voulez?

0
paragrafheading.push($(this).parents('p')[0].prevAll('h3')[0].text()); 

en procédant ainsi, signifie que même si les changements de structure dans l'avenir vous serez toujours en mesure d'obtenir les premiers regardles élément h3 ancêtre de combien de paragraphes, etc. sont dans l'arbre dom avant l'étiquette

+0

h3 n'est pas un parent direct à l'élément, donc cela ne fonctionnera pas. –

+0

Ah ouais, bon point! mal lire le code HTML. Réponse éditée –

Questions connexes