#javascript #jquery #html
#javascript #jquery #HTML
Вопрос:
Допустим, у меня есть следующий HTML:
<p class="link"><a href="#">This is a link.</a></p>
<p class="link"><a href="#">This is another link.</a></p>
<p class="link current"><a href="#">This is yet another link.</a></p>
<p class="link"><a href="#">This is still another link.</a></p>
Я хочу использовать $.each()
функцию jQuery для просмотра всех объектов с классом link
, но я хочу пропустить тот, у которого также есть класс current
. Как мне это сделать?
Я мог бы проверить наличие класса в каждом цикле следующим образом:
$('.link').each(function() {
if (!$(this).hasClass('current'))
$(this).fadeOut();
})
… но есть ли способ указать «класс x, но не класс y» в jQuery, устранив необходимость в условии if ?
Ответ №1:
Исключите элементы, используя селектор:not():
$('.link:not(.current)').fadeOut();
Ответ №2:
Вы можете filter
использовать свой первоначальный объект jQuery:
$('.link').filter(function() {
return !$(this).hasClass('current');
}).fadeOut();
Комментарии:
1. Интересно, но это все еще выглядит слишком сложным по сравнению с методом, который я упомянул в своем посте.
Ответ №3:
$('.link').each(function() {
if ($(this).attr('class')!="link current")
$(this).fadeOut();
})
Комментарии:
1. Это почти то же самое, что и использование .hasClass() , что кажется более аккуратным!
Ответ №4:
Как предложил Гуффа, вы можете использовать :not()
псевдоселектор CSS. Чтобы использовать его для .each()
функции, вы можете сделать следующее (см. Этот jsfiddle в качестве доказательства):
jQuery(".link:not(.current)").each(function(index, element){
jQuery(element).fadeOut();
});
Соответствует ли это вашим потребностям?
Комментарии:
1. Оказывается, мне не нужен .each(), потому что селектор все равно получает все объекты! Спасибо!
2. @aalaap: Да, селектор получает все объекты в обоих случаях 🙂 Разница лишь в том, когда вам нужно сделать что-то сложное (используя
.each()
) или простое (применяя функцию jQuery ко всем элементам — в данном случае.fadeOut()
) 🙂