Как проверить, имеет ли элемент НЕ определенный класс?

Как проверить, нет ли класса. Например, я знаю, как проверить, есть ли у него класс «тест», но как проверить, нет ли у него класса «тест»?

if($(this).hasClass("test")){
}

person user1005793    schedule 20.10.2011    source источник


Ответы (8)


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

// select all divs that don't have class test
$( 'div' ).not( ".test" );
$( 'div:not(.test)' );  // <-- alternative 
person JJJ    schedule 20.10.2011
comment
ИМХО твой ответ лучший. Если ответ sdleihssirhc верен, то этот вопрос не имеет ничего общего с jQuery и его лучше сформулировать как «с учетом некоторого условия, как мне проверить, что это условие НЕ выполняется в Javascript». Чего мы хотим от jQuery, так это работать с целыми коллекциями элементов DOM так же просто, как с отдельными объектами. Ваш ответ дает именно такое решение. +1 - person Stijn de Witt; 28.09.2012
comment
@byronyasgur В контексте исходного вопроса постер хотел проверить, не имеет ли определенный известный элемент класса. Этот код выбирает все элементы, у которых нет класса, поэтому он не решит проблему плаката. Я не помню, почему я разместил это в первую очередь. - person JJJ; 12.03.2013

Выберите элемент (или группу элементов) с классом «abc», но не с классом «xyz»:

    $('.abc:not(".xyz")')

При выборе обычного CSS вы можете использовать .abc:not(.xyz).

person George-Paul B.    schedule 10.06.2015

используйте метод .not() и проверьте наличие атрибута:

$('p').not('[class]');

Проверьте это здесь: http://jsfiddle.net/AWb79/

person Matthew Cira    schedule 21.02.2014
comment
Это совершенно неправильно. Скобки не для классов, а используются для селекторов, идентифицирующих атрибуты. - person Misterparker; 31.07.2015
comment
На самом деле это совершенно правильно. «[класс]» правильно определяет атрибут (не) наличия класса. - person Deborah; 19.01.2017
comment
Классы @Misterparker являются атрибутами. - person Matthew Cira; 06.06.2017
comment
это проверяет наличие атрибута, а не случай, если элемент имеет определенный класс, как в значении класса - person Mark; 15.11.2018

Вы можете попробовать это:

<div id="div1" class="myClass">there is a class</div>
<div id="div2"> there is no class2 </div>

$(document).ready(function(){
    $("#div2").not('.myClass');  // do not have `myClass` class.
});
person aircraft    schedule 21.03.2018
comment
Этот ответ не добавляет ценности странице, он был опубликован на 7 лет раньше. Пожалуйста, никогда не публикуйте только код и дублируйте контент. - person mickmackusa; 28.06.2019

Есть более сложные сценарии, когда это не работает. Что делать, если вы хотите выбрать элемент с классом A, который не содержит элементов с классом B. В итоге вам понадобится что-то вроде:

Если родительский элемент не содержит определенного дочернего элемента; jQuery

person omarjebari    schedule 05.10.2016

прочитав это 6 лет спустя, я подумал, что тоже попробую его, тоже в духе TIMTOWTDI...:D, надеясь, что это не неправильный «JS-этикет».

Обычно я устанавливаю переменную с условием, а затем ссылаюсь на нее позже..т.е.

// var set up globally OR locally depending on your requirements
var hC;

function(el) {
  var $this = el;
  hC = $this.hasClass("test");

  // use the variable in the conditional statement
  if (!hC) {
    //
  }
}

Хотя я должен упомянуть, что делаю это, потому что в основном использую условный тернарный оператор и хочу чистый код. Итак, в этом случае все, что у меня было бы, это:

hC ? '' : foo(x, n) ;
   // OR -----------
!hC ? foo(x, n) : '' ;

...вместо этого:

$this.hasClass("test") ? '' : foo(x, n) ;
   // OR -----------
(!$this.hasClass("test")) ? foo(x, n) : '' ;
person le_pragmatist    schedule 12.03.2018

Я не знаю почему, но принятый ответ не сработал для меня. Вместо этого это сработало:

if ($(this).hasClass("test") !== false) {}
person Aljoša    schedule 23.12.2019
comment
Это фактически проверяет, есть ли у него тест класса. Чтобы проверить, НЕТ ли у него теста класса, вам нужно будет иметь === false или !==true вместо !== false. - person Lisa Cerilli; 18.03.2020

person    schedule
comment
В духе TIMTOWTDI вот ужасное решение: if($(this).is(":not(.test)")) ›:) - person Phrogz; 20.10.2011
comment
На случай, если кому-то интересно: существует более одного способа сделать это, но иногда постоянство тоже не так уж и плохо. - person Captain Hypertext; 22.02.2016