jQuery wählt ein div mit einer bestimmten Klasse aus, die keine andere Klasse hat

74
<div class="fuu">
  ...
</div>

<div class="fuu no">
  ...
</div>

...

Wie kann ich alle fuuaußer denen auswählen , die die .noKlasse haben?

Alex
quelle

Antworten:

136

Verwenden Sie :not()diese Option, um die andere Klasse auszuschließen:

$('.fuu:not(.no)')
BoltClock
quelle
26
Ein kleiner Leckerbissen: .fuu:not(.no)ist auch ein gültiger CSS3-Selektor und entspricht den gleichen Elementen in Browsern, die dies unterstützen :not(). Daher glaube ich, dass jQuery diesen Selektor übergeben wird, querySelectorAll()anstatt sich für diese Browser auf Sizzle zu verlassen, wodurch die Leistung in diesen Browsern verbessert wird. Natürlich interessiert es niemanden :)
BoltClock
+1 von mir auf den netten Extra-Tipp, und mit +8 scheint es, dass "einige" Entwickler sich um die Leistung kümmern :-)
Mario Awad
3
Ich konnte nicht folgen, um zu arbeiten : $("#mydiv .fuu:not(.no)").click(function(){console.log('test');});. Ich habe lange nach einem Problem gesucht not(), das damit zusammenhängt. Schließlich lag es einfach daran, dass die activeKlasse dynamisch hinzugefügt wurde. Ich musste es so machen : $("#mydiv").on('click', '.fuu:not(.no)', function(){console.log('test');});. Da ich hier weiter herumgegraben habe und dachte, dass not()es nicht funktioniert, dachte ich, ein Kommentar hier könnte anderen helfen.
Fpierrat
1
Wenn Sie mehrere Klassen ausschließen müssen, lautet die Syntax wie folgt : $('.aaa:not(.bbb):not(.ccc)'). Das wird alles bekommen, was Klasse hat, aaaaber keine Klasse bbb oder ccc
Kip
10

Sie können die '.no'-Klasse auch mit folgenden Elementen herausfiltern:

$('.fuu').not('.no');
Joey C.
quelle
-8

Holen Sie sich den Klassennamen des Div. Wenn der Klassenname ein Leerzeichen enthält, bedeutet dies, dass es mehr als eine Klasse hat!

Sourav
quelle
4
Und was wäre, wenn es eine gäbe <div class="fuu yes">? Es hat keine noKlasse, aber es würde false für zurückgeben .attr('class') == 'fuu'.
BoltClock