Ich habe eine einfache if-Aussage als solche:
if ($('html').hasClass('m320')) {
// do stuff
}
Dies funktioniert wie erwartet. Ich möchte jedoch weitere Klassen hinzufügen, um if statement
zu überprüfen, ob eine der Klassen im <html>
Tag vorhanden ist. Ich brauche es, damit es nicht alle sind, sondern nur die Anwesenheit von mindestens einer Klasse, aber es kann mehr sein.
Mein Anwendungsfall ist , dass ich Klassen (zB m320
, m768
) hinzugefügt für verschiedene Darstellungsbreiten so dass ich nur bestimmte JQuery ausgeführt werden soll , wenn es sich um eine bestimmte Breite (Klasse) ist.
Folgendes habe ich bisher versucht:
1.
if ($('html').hasClass('m320', 'm768')) {
// do stuff
}
2.
if ($('html').hasClass('m320')) || ($('html').hasClass('m768')) {
// do stuff
}
3.
if ($('html').hasClass(['m320', 'm768'])) {
// do stuff
}
Keines davon scheint jedoch zu funktionieren. Ich bin mir nicht sicher, was ich falsch mache, aber höchstwahrscheinlich meine Syntax oder Struktur.
javascript
jquery
syntax
logic
Danny Englander
quelle
quelle
Antworten:
Sie hatten gerade einige durcheinandergebrachte Klammern in Ihrem zweiten Versuch.
quelle
$('html')
eine Variable zwischenspeichern, anstatt sie mehrmals nachschlagen zu müssen.Sie könnten
is()
anstelle von verwendenhasClass()
:quelle
hasClass()
ist wahrscheinlich schneller, aber dieis()
meiste Zeit viel bequemeris()
undhasClass()
Zum Spaß habe ich eine kleine jQuery-Add-On-Methode geschrieben, die nach einem von mehreren Klassennamen sucht:
Dann könnten Sie in Ihrem Beispiel Folgendes verwenden:
Sie können so viele Klassennamen übergeben, wie Sie möchten.
Hier ist eine erweiterte Version, mit der Sie auch mehrere Klassennamen übergeben können, die durch ein Leerzeichen getrennt sind:
Arbeitsdemo: http://jsfiddle.net/jfriend00/uvtSA/
quelle
Dies kann eine andere Lösung sein:
laut jsperf.com ist es auch ziemlich schnell.
quelle
Für alle, die sich über einige der verschiedenen Leistungsaspekte mit all diesen verschiedenen Optionen wundern, habe ich hier einen jsperf-Fall erstellt: jsperf
Kurz gesagt, die Verwendung
element.hasClass('class')
ist am schnellsten.Die nächstbeste Wette ist die Verwendung
elem.hasClass('classA') || elem.hasClass('classB')
. Ein Hinweis zu diesem Thema: Ordnung ist wichtig! Wenn die Klasse 'classA' eher gefunden wird, listen Sie sie zuerst auf! ODER-Bedingungsanweisungen werden zurückgegeben, sobald eine davon erfüllt ist.Die mit Abstand schlechteste Leistung war die Verwendung
element.is('.class')
.Ebenfalls im jsperf aufgeführt sind die Funktion von CyberMonk und die Lösung von Kolja .
quelle
Hier ist eine kleine Variation der Antwort von jfriend00:
Ermöglicht die Verwendung derselben Syntax wie .addClass () und .removeClass (). zB,
.hasAnyClass('m320 m768')
braucht natürlich kugelsicher, da es mindestens ein Argument voraussetzt.quelle
quelle
Die hasClass-Methode akzeptiert ein Array von Klassennamen als Argument. Sie können Folgendes tun:
quelle
Versuche dies:
quelle
Ich habe mehrere Klassen in einem Parameter der hasClass-Methode getestet und es funktioniert wie erwartet.
Dies ist für den Fall, dass beide Klassen vorhanden sein müssen. Verwenden Sie für entweder oder Logik einfach ||
Fühlen Sie sich frei, nach Bedarf zu optimieren
quelle