Использование $(this) селектора в jquery с другим вложенным селектором

Каков наилучший способ указать вложенный селектор при использовании $(this)?

В этом примере:

$('.example').each(function() {
    var url = $(this).attr('href');
});

url вернется undefinedпотому что это ожидало бы 'a' селектор первым. В идеале я бы хотел сказать:

var url = $(this, 'a').attr('href');

но это не работает, следующее работает как задумано, но выглядит не очень аккуратно:

$('.example').each(function() {
    var link = $(this).find('a');
    var url = $(link).attr('href');
});

так как я могу использовать $(this) а также 'a' правильно ли?


примечание: я знаю, что следующее будет работать, но не для целей моего вопроса.

 $('.example > a').each(function() {
     var url = $(this).attr('href');
 });

2 ответа

Решение

Использовать:

$(this).find('a').attr('href');

(Это должен быть комментарий, но мне нужно больше места для кода).

Когда ты сказал

это ожидало бы селектор 'a' сначала

что именно вы имеете в виду под "этим"? Там нет ничего, что "ожидает" чего-либо. Любой элемент (теоретически) может иметь href приписывать.

Кроме того, как выглядит ваш HTML? Если это

<a class="example" href="#">...</a>

тогда работает только ваш первый пример, остальные нет. Ваши другие примеры все ожидают

<div class="example"><a href="#">...</a></div>

что в свою очередь не работает с первым примером.

в чем именно проблема?: Если $(this).attr("href") возвращает неопределенное значение, тогда вы можете легко проверить это. Можете ли вы привести конкретный пример использования?

Другие вопросы по тегам