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

Odpowiedzi:


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

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 

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


6

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

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

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


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

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

0

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

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

To faktycznie sprawdza, czy NIE ma klasy „test”. Aby sprawdzić, czy NIE ma klasy „test”, musisz mieć „=== false” lub „! == true” zamiast „! == false”.
Lisa Cerilli,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.