2010-09-09 5 views
2

Je gère un événement click d'un lien hypertexte avec une fonction JavaScript. Je souhaite récupérer les données du lien hypertexte.Question très basique à propos de parent() et prev() dans jQuery

La page ressemble à ceci:

<div class="div1"> 
    <div title="Title 1" class="div2"> 
     <p class="p1"><a class="linkJs">The link in question</a></p> 
    </div> 
</div> 

<div class="div1"> 
    <div title="Title 2" class="div2"> 
     <p class="p1"><a class="linkJs">The link in question</a></p> 
    </div> 
</div> 

Et quelque chose comme ça JavaScript:

$(function() { 
    $('a.linkJs').click(function(){ 
     value=$(this).parent().prev().text(); 
     alert(value); 
    }); 
}); 

Ce que je veux avoir est la valeur du titre dans le div2. En cliquant sur le premier lien, je reçois: Titre 1. Et en cliquant sur le 2ème: Titre 2.

Cela doit être très très basique mais je ne trouve pas ma réponse nulle part.

Merci.

Répondre

2

Vous pouvez trouver la méthode closest:

$('a.linkJs').click(function(){ 
     value=$(this).closest('div').attr('title'); 
     alert(value); 
    }); 
3

Vous voulez utiliser closest

var value = $(this).closest('div').attr('title'); 

Votre problème est que la balise <p> est pas un frère à l'<div> mais un enfant, donc vous devrez faire parent() deux fois - il n'y a pas besoin, cependant, car la fonction closest est un raccourci très pratique. En outre, la fonction text() renvoie le contenu du texte pur à l'intérieur de la balise, si vous voulez l'attribut title de la balise vous devez utiliser la fonction attr.

1

essayez d'utiliser la méthode closest(): http://api.jquery.com/closest/

Obtenez le premier élément ancêtre qui correspond au sélecteur, en commençant par l'élément courant et progresse jusqu'à à travers l'arbre DOM.

$(function() { 
    $('a.linkJs').click(function(){ 
     value=$(this).closest(".div2").attr("title"); 
     alert(value); 
    }); 
}); 
0
var value = $(this).closest('.div2').attr('title'); 

Au lieu d'utiliser div, .div2 peut être un sélecteur plus approprié, car il peut y avoir d'autres éléments div à l'intérieur div.div2.

0

Pas très joli, mais cela devrait fonctionner aussi.

$(function() { 
    $('a.linkJs').click(function(){ 
     value=$(this).parents()[1]; 
     alert($(value).attr('title')); 
    }); 
});