J'ai quelques lignes de table
<tr class="b_row">
<td>
<div class="cpt">
<h2>
<a href="/ref/ref/1.html">example</a>
</h2>
</div>
</td>
</tr>
<!--more elements -->
<tr class="b_row">
<td>
<div class="cpt">
<h2>
<a href="/ref/two/23.html">example N</a>
</h2>
</div>
</td>
</tr>
J'ai besoin d'obtenir des hyperliens dans l'attribut. J'utilise ce script
function openAll()
{
$("tr.b_row").each(function(){
var a_href = $('div.cpt').find('h2 a').attr('href');
alert ("Href is: " + a_href);
}
Problème: variable a_href
est toujours/ref/ref/1.html
En boucle, vous devez vous référer à l'élément en cours de traitement, alors écrivez:
var a_href = $(this).find('div.cpt h2 a').attr('href');
var a_href = $('div.cpt').find('h2 a').attr('href');
devrait être
var a_href = $(this).find('div.cpt').find('h2 a').attr('href');
Dans la première ligne, votre requête recherche l'ensemble du document. Dans le second, la requête démarre à partir de votre élément tr
et obtient uniquement l'élément en dessous. (Vous pouvez combiner les find
s si vous le souhaitez, je les ai laissés séparés pour illustrer le point.)
Très simplement, utilisez this
comme contexte: http://api.jquery.com/jQuery/#selector-context
var a_href = $('div.cpt', this).find('h2 a').attr('href');
Qui dit, trouvez 'div.cpt'
uniquement à l'intérieur this
Utilisez ceci:
$(function(){
$("tr.b_row").each(function(){
var a_href = $(this).find('div.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
});
Voir une démonstration de travail: http://jsfiddle.net/usmanhalalit/4Ea4k/1/
ajoutez une référence à this
, qui fait référence à votre b_row
:
$("tr.b_row").each(function(){
var a_href = $( this ).find('div.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
Utilisez $(this)
pour obtenir l'élément desire.
function openAll()
{
$("tr.b_row").each(function(){
var a_href = $(this).find('.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
}