Jak sprawdzić, czy element NIE ma określonej klasy?

232

Jak sprawdzić, czy nie ma zajęć. Na przykład wiem, jak sprawdzić, czy ma „test” klasy, ale jak sprawdzić, czy nie ma „testu” klasy?

if($(this).hasClass("test")){
}
użytkownik1005793
źródło

Odpowiedzi:

484
if (!$(this).hasClass("test")) {
sdleihssirhc
źródło
34
W żyle TIMTOWTDI oto straszne rozwiązanie: if($(this).is(":not(.test)"))> :)
Phrogz,
6
TIMTOWTDIBSCINABTE
Fizzix
25
Na wypadek, gdyby ktoś się zastanawiał: jest na to więcej niż jeden sposób, ale czasami spójność też nie jest zła.
Kapitan Hypertext
145

Odpowiedź sdleihssirhc jest oczywiście poprawna dla przypadku w pytaniu, ale jako odniesienie, jeśli chcesz wybrać elementy, które nie mają określonej klasy, możesz użyć selektora not :

// select all divs that don't have class test
$( 'div' ).not( ".test" );
$( 'div:not(.test)' );  // <-- alternative 
JJJ
źródło
8
IMHO twoja odpowiedź jest najlepsza. Jeśli odpowiedź sdleihssirhc jest prawidłowa, to pytanie nie ma nic wspólnego z jQuery i byłoby lepiej sformułowane jako „biorąc pod uwagę pewien warunek, jak mam sprawdzić, czy warunek ten NIE jest prawdziwy w JavaScript”. W jQuery chcemy, aby operacje na całych kolekcjach elementów DOM były tak proste, jak to możliwe na pojedynczych obiektach. Twoja odpowiedź zapewnia właśnie to rozwiązanie. +1
Stijn de Witt
1
@byronyasgur W kontekście pierwotnego pytania plakat chciał sprawdzić, czy jakiś znany element nie ma klasy. Ten kod wybiera wszystkie elementy, które nie mają klasy, więc nie rozwiązałoby to problemu z plakatem. Nie pamiętam, dlaczego opublikowałem to w pierwszej kolejności.
JJJ,
14

Wybierz element (lub grupę elementów) mający klasę „abc”, a nie klasę „xyz”:

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

Wybierając zwykły CSS, możesz użyć .abc:not(.xyz).

George-Paul B.
źródło
6

użyj metody .not () i sprawdź atrybut:

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

Sprawdź tutaj: http://jsfiddle.net/AWb79/

Matthew Cira
źródło
8
To jest całkowicie błędne. Nawiasy klamrowe nie są przeznaczone dla klas, ale są używane do selektorów identyfikujących atrybuty.
Misterparker
1
Właściwie to całkowicie słuszne. „[Klasa]” poprawnie identyfikuje atrybut (nie) posiadania klasy.
Deborah
Klasy @Misterparker są atrybutami.
Matthew Cira,
sprawdza to, czy atrybut jest obecny, a nie przypadek, jeśli element ma określoną klasę, jak w wartości klasy
Mark
6

Możesz spróbować:

<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.
});
samolot
źródło
Ta odpowiedź nie wnosi żadnej wartości do strony, została opublikowana 7 lat wcześniej. Nigdy nie publikuj treści zawierających wyłącznie kod i powielających się treści.
mickmackusa
0

czytając te 6 lat później i pomyślałem, że też go zhakuję , również w żyle TIMTOWTDI ...: D, mając nadzieję, że nie jest to nieprawidłowa „etykieta JS”.

Zwykle ustawiam var z warunkiem, a następnie odwołuję się do niego później.

// 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) {
    //
  }
}

Chociaż powinienem wspomnieć, że robię to, ponieważ używam głównie warunkowego operatora trójskładnikowego i chcę czystego kodu. W tym przypadku chciałbym tylko:

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

...zamiast tego:

$this.hasClass("test") ? '' : foo(x, n) ;
   // OR -----------
(!$this.hasClass("test")) ? foo(x, n) : '' ;
le_pragmatist
źródło
0

Nie wiem dlaczego, ale zaakceptowana odpowiedź nie działała dla mnie. Zamiast tego działało:

if ($(this).hasClass("test") !== false) {}
Aljoša
źródło
To faktycznie sprawdza, czy NIE ma klasy „test”. Aby sprawdzić, czy NIE ma klasy „test”, musisz mieć „=== false” lub „! == true” zamiast „! == false”.
Lisa Cerilli,