Keine Klassenauswahl in jQuery


270

Gibt es einen einfachen Selektorausdruck, um Elemente mit einer bestimmten Klasse nicht auszuwählen?

<div class="first-foo" />
<div class="first-moo" />
<div class="first-koo" />
<div class="first-bar second-foo" />

Ich möchte nur die ersten drei Divs bekommen und es versucht haben

$(div[class^="first-"][class!="first-bar"])

Dies erhält jedoch alles, da das letzte Div mehr als den ersten Takt enthält. Gibt es eine Möglichkeit, einen Platzhalter in einem solchen Ausdruck zu verwenden? Sowas in der Art

$(div[class^="first-"][class!="first-bar*"]) // doesn't seem to work

Gibt es noch andere Selektoren, die helfen könnten?


Scratch meinen früheren Kommentar, ich habe gerade die Frage noch einmal gelesen. Kritische Klasse ist first-bar.
BoltClock

Wenn man alle Elemente auswählen möchte, die weder Klasse1 noch Klasse2 haben, würde die Verkettung funktionieren:$('div[class^="first-"]').not('.class1').not('.class2')
J0ANMM

Antworten:


543

Sie benötigen den :not()Selektor:

$('div[class^="first-"]:not(.first-bar)')

oder alternativ die .not()Methode:

$('div[class^="first-"]').not('.first-bar');

91
Da: not () bis zu 2-3 Mal schneller als .not () ( jsperf.com/jquery-css3-not-vs-not ) ist, möchten Sie möglicherweise Folgendes verwenden: not (). In den jQuery-Dokumenten wird jedoch empfohlen, stattdessen .not () zu verwenden, da es besser lesbar ist ( api.jquery.com/not-selector ). Hoffe das hilft jemandem eine Entscheidung zwischen den beiden zu treffen!
Rinogo

2
@rinogo Es ist jetzt schneller, dass die überwiegende Mehrheit der Browser querySelectorAll unterstützt, aber das war nicht immer der Fall.
einsamer

4
Ja genau! :) Ich hoffe, mein Kommentar wurde nicht kritisiert. Ich wollte eher Ihre bereits hilfreiche Frage ergänzen.
Rinogo

1
Vielen Dank!! Deaktivieren Sie die Eingabetaste für alle außer meinen Filterboxen. $ ("input: not (.rgFilterBox)"). keydown (Funktion (e) {if (e.keyCode == 13) {return false;} return true;});
Hardba11

3
@ Daniel, ja, aber wenn es ist , dann ist es eine super einfache Änderung, um einen sofortigen Leistungsschub zu bekommen :)
Rinogo

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.