Ответ 1
В цикле вы должны ссылаться на текущий обработанный элемент, поэтому пишите:
var a_href = $(this).find('div.cpt h2 a').attr('href');
У меня есть несколько строк таблицы
<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>
Мне нужно получить гиперссылки в атрибуте. Я использую этот script
function openAll()
{
$("tr.b_row").each(function(){
var a_href = $('div.cpt').find('h2 a').attr('href');
alert ("Href is: "+a_href);
});
}
Проблема: переменная a_href всегда/ref/ref/1.html
В цикле вы должны ссылаться на текущий обработанный элемент, поэтому пишите:
var a_href = $(this).find('div.cpt h2 a').attr('href');
var a_href = $('div.cpt').find('h2 a').attr('href');
должен быть
var a_href = $(this).find('div.cpt').find('h2 a').attr('href');
В первой строке ваш запрос выполняет поиск всего документа. Во втором случае запрос начинается с вашего элемента tr
и получает только элемент под ним. (Вы можете комбинировать find
, если хотите, я оставил их отдельно, чтобы проиллюстрировать эту точку.)
Используйте это:
$(function(){
$("tr.b_row").each(function(){
var a_href = $(this).find('div.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
});
См. рабочую демонстрацию: http://jsfiddle.net/usmanhalalit/4Ea4k/1/
добавьте ссылку на this
, которая ссылается на ваш b_row
:
$("tr.b_row").each(function(){
var a_href = $( this ).find('div.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
Очень просто используйте this
как контекст: http://api.jquery.com/jQuery/#selector-context
var a_href = $('div.cpt', this).find('h2 a').attr('href');
Что говорит, найдите 'div.cpt'
только внутри this
Используйте $(this)
для получения элемента желания.
function openAll()
{
$("tr.b_row").each(function(){
var a_href = $(this).find('.cpt h2 a').attr('href');
alert ("Href is: "+a_href);
});
}