Как я могу заставить функцию $.each() jQuery пропускать определенные объекты на основе критериев?

#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() ) 🙂