Получить атрибут «alt» из изображения, которое находится внутри тега <a> - PullRequest
12 голосов
/ 07 октября 2010

это должно быть довольно просто, но по какой-то причине это не работает.

Я хочу получить атрибут «alt» из изображения, которое находится внутри тега

<div id="album-artwork">
<ul>
   <li><a href="link to large image"><img src="thumbnail" alt="description of the image" /></a></li>
   ...
</ul>
</div>



$("#album-artwork a").click(function(e) {
e.preventDefault();

var src = $(this).attr("href");
var alt = $(this).next("img").attr("alt");


alert(src); // ok!
alert(alt); //output: undefined

});

есть идеи, почему next () не работает? Есть ли лучшее решение там?

Спасибо заранее Marco

Ответы [ 8 ]

24 голосов
/ 07 октября 2010

Это потому, что тег изображения находится внутри тега ul. next ищет теги только на том же уровне. Вам придется использовать

var alt = $(this).children("img").attr("alt");

РЕДАКТИРОВАТЬ: включены дополнительные ", которые отсутствовали

6 голосов
/ 04 мая 2012
$(this).find('img').attr('alt'); 
3 голосов
/ 07 октября 2010

или

$('img', this).attr('alt');

Тест: http://jsbin.com/amado4

3 голосов
/ 07 октября 2010

Попробуйте вместо этого $(this).find('img') выбрать какой-либо элемент в ссылке.

2 голосов
/ 07 октября 2010

Nevermind. Я только что понял ... Я понял, что img не брат <a>, а ребенок <a>

Это правильный синтаксис

var alt = $(this).children("img").attr("alt"); 
1 голос
/ 07 февраля 2014

Попробуйте это проверено и он работает !!!

<div id="album-artwork">
<ul>
   <li><a href="javascript:void(0);"><img src="images/ajax-loader.gif" alt="ajax-loader" /></a></li>
   <li><a href="javascript:void(0);"><img src="images/close.png" alt="close" /></a></li>
   <li><a href="javascript:void(0);"><img src="images/copy.png" alt="copy" /></a></li>
</ul>
</div>

и код jQuery:

    $(document).ready(function() {
        $("#album-artwork a").click(function(e) {
            e.preventDefault();

            var src = $(this).attr("href");
            //var alt = $(this).next("img").attr("alt");
            var alt = $(this).children().attr("alt");
            //find function also do the same thing if you want to use.
            /*var alt = $(this).find("img").attr("alt");*/

            alert(src); // ok!
            console.log(src); // ok!
            alert(alt); //output: not undefined now its ok!
            console.log(alt); //output: not undefined now its ok!
        });
    });

children() функция находит детей, но если вы хотите найти какие-либо конкретныедети определяют имя детей следующим образом children("img") ИЛИ children("button").

1 голос
/ 07 октября 2010

Не .next подхватит следующий элемент, который является следующим Li, а не IMG?

0 голосов
/ 07 мая 2019

Не усложняйте:

$('img').on({'click': function(){
    var alt = this.alt;         
...