jQuery проблема каждой итерации
-
26-09-2019 - |
Вопрос
<section class="photos">
<table>
<tr>
<td><a href="/a"><img src="b.jpg" /></a></td>
<td><a href="/a"><img src="b.jpg" /></a></td>
<td><a href="/a"><img src="b.jpg" /></a></td>
</tr>
<tr>
<td><a href="/a"><img src="b.jpg" /></a></td>
<td><a href="/a"><img src="b.jpg" /></a></td>
</tr>
</table>
</section>
И затем я пытаюсь перебрать каждый из них, чтобы вернуть ссылку href и изображение src.
$(".photos td").each(function (index, value) {
console.log(value.a.attr('href'));
console.log(value.img.attr('src'));
});
К сожалению, приведенный выше псевдо-сломанный код не работает.Есть идеи?
Решение
Вы не можете запускать методы jQuery на value
, поскольку это всего лишь узел DOM.Сначала создайте из него объект jQuery (я предпочитаю this
к value
аргумент, но в данном случае они одинаковые):
$('.photos td').each(function(){
console.log( $(this).find('a').attr('href') );
console.log( $(this).find('img').attr('src') );
});
Другие советы
Адам уже дал ответ, но поскольку я его печатал...попробуй это:(единственная разница заключается в части обхода, поскольку Адам использует «это», а я использую «значение» (которые одинаковы).
$(".photos td").each(function (index, value) {
console.log($('a', value).attr('href'));
console.log($('img', value).attr('src'));
});
Не забывайте, что value представляет собой элемент dom (а не элемент jQuery), а attr() — это метод jQuery, который работает только для объектов jQuery.Кроме того, разве вам не следует закрывать теги?
Попробуй это:
$(".photos td").each(function (index, value) {
console.log($(this).find('a').attr('href'));
console.log($(this).find('img').attr('src'));
});