Як перевірити, чи елемент НЕ має певного класу?


232

Як перевірити, чи немає класу. Наприклад, я знаю, як перевірити, чи є у нього клас "test", але як я можу перевірити, чи немає в ньому класу "test"?

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

Відповіді:


484
if (!$(this).hasClass("test")) {

34
У дусі TIMTOWTDI ось жахливе рішення: if($(this).is(":not(.test)"))> :)
Phrogz

6
TIMTOWTDIBSCINABTE
Fizzix

25
У випадку, коли хтось цікавиться: Існує більше, ніж один спосіб зробити це, але іноді послідовність не є поганою річчю.
Гіпертекст капітана

145

Відповідь sdleihssirhc, звичайно, є правильною для випадку у питанні, але як орієнтир, якщо вам потрібно вибрати елементи, які не мають певного класу, ви можете використовувати селектор not :

// select all divs that don't have class test
$( 'div' ).not( ".test" );
$( 'div:not(.test)' );  // <-- alternative 

8
ІМХО найкраще ваша відповідь. Якщо відповідь sdleihssirhc правильна, то це питання не має нічого спільного з jQuery і його краще сформулювати як "з урахуванням певної умови, як я перевіряю, що ця умова НЕ відповідає дійсності в JavaScript". Що ми хочемо з jQuery, це керувати цілими колекціями елементів DOM так само просто, як ми можемо на окремих об'єктах. Ваша відповідь забезпечує саме таке рішення. +1
Штійн де Вітт

1
@byronyasgur У контексті оригінального запитання плакат хотів перевірити, чи певний відомий елемент не мав класу. Цей код вибирає всі елементи, у яких немає класу, тому він не вирішить проблему плаката. Я не пам'ятаю, чому я розмістив це в першу чергу.
JJJ

14

Виберіть елемент (або групу елементів), що має клас "abc", не має клас "xyz":

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

Вибираючи звичайний CSS, який ви можете використовувати .abc:not(.xyz).


6

скористайтеся методом .not () і перевірте наявність атрибута:

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

Перевірте це тут: http://jsfiddle.net/AWb79/


8
Це абсолютно неправильно. Дужки не для класів, але використовуються для селекторів, що ідентифікують атрибути.
Містерпаркер

1
Насправді це абсолютно правильно. '[Class]' правильно ідентифікує атрибут (не), що має клас.
Дебора

Класи @Misterparker - атрибути.
Метью Сіра

це перевіряє наявність атрибута, а не випадку, якщо елемент має певний клас, як у значенні класу
Позначити

6

Ви можете спробувати це:

<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.
});

Ця відповідь не додає ніякої цінності на сторінку, вона була розміщена 7 років ealier. Будь ласка, ніколи не публікуйте вміст, що містить лише код та дублює вміст.
mickmackusa


0

прочитавши це 6 років пізніше, і подумав, що я також захочу його зламати, також у весі TIMTOWTDI ...: D, сподіваючись, що це неправильний "етикет JS".

Я зазвичай встановлюю var із умовою, а потім посилаюсь на нього пізніше..ie;

// 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) : '' ;

0

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

if ($(this).hasClass("test") !== false) {}

Це фактично перевіряє, чи НЕ має клас "тест". Для того, щоб перевірити, чи НЕ МАЄ клас "тест", вам потрібно буде мати "=== false", або "! == true" замість "! == false".
Ліза Черіллі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.