Wie macht man jQuery's hasClass
mit einfachem altem JavaScript? Beispielsweise,
<body class="foo thatClass bar">
Wie kann man mit JavaScript fragen, ob dies der Fall <body>
ist thatClass
?
javascript
dom
Kyle
quelle
quelle
class
Eigenschaft analysieren (bei mehreren Klassen werden mehrere Klassennamen in zufälliger Reihenfolge durch ein Leerzeichen getrennt) und prüfen, ob Ihr Klassenname darin enthalten ist. Nicht furchtbar schwierig, aber immer noch furchtbar unpraktisch, wenn nicht zu Lernzwecken :)Antworten:
Sie können überprüfen, ob
element.className
Übereinstimmungen vorliegen/\bthatClass\b/
.\b
entspricht einem Wortumbruch.Oder Sie können die eigene Implementierung von jQuery verwenden:
Um Ihre allgemeinere Frage zu beantworten, können Sie sich den Quellcode von jQuery auf github oder die Quelle
hasClass
speziell in diesem Quell-Viewer ansehen .quelle
rclass
eigentlich;))\b
mit "thatClass-anotherClass" übereinstimmen?/[\t\r\n\f]/g
. Es ist auch gut zu erwähnen, dass/\bclass\b/
Klassennamen mit-
Minuszeichen fehlschlagen können (ansonsten funktioniert es gut). Deshalb ist die Implementierung von jQuery besser und zuverlässiger. Beispiel:/\bbig\b/.test('big-text')
Gibt true anstelle von erwartet false zurück.Verwenden Sie einfach
classList.contains()
:Andere Verwendungen von
classList
:Browser-Unterstützung:
classList
Browser-Unterstützungquelle
.classList
als Zeichenfolge abgerufen werden, erkennt jedoch die moderneren Methoden wie.classList.contains()
Der effektivste Einzeiler, der
thisClass
einem Element gesucht wird , das hatclass="thisClass-suffix"
.quelle
Das Attribut, in dem die verwendeten Klassen gespeichert werden, lautet
className
.Sie können also sagen:
Wenn Sie einen Ort suchen, der Ihnen zeigt, wie jQuery alles macht, würde ich vorschlagen:
http://code.jquery.com/jquery-1.5.js
quelle
match
Attribut ist wieder praktisch! Macht jQuery wirklich etwas mehr als in JavaScript möglich?! Wenn nicht, ist jQuery nur ein unnötiges Gewicht von Kurzschriften.myclass-something
, ebenso wie der\b
Bindestrich.quelle
hasClass-Funktion:
addClass-Funktion:
removeClass-Funktion:
quelle
Ich verwende eine einfache / minimale Lösung, eine Zeile, einen Cross-Browser und arbeite auch mit älteren Browsern:
Diese Methode ist großartig, da keine Polyfills erforderlich sind und wenn Sie sie verwenden, ist sie
classList
in Bezug auf die Leistung viel besser. Zumindest für mich.Update: Ich habe eine winzige Polyfüllung erstellt, die eine Allround-Lösung ist, die ich jetzt verwende:
Informationen zur anderen Klassenmanipulation finden Sie in der vollständigen Datei hier .
quelle
notmyClassHere
?!/myClass/.test(document.body.className)
Beachten Sie auch das!
Symbol.thisIsmyClassHere
.Eine gute Lösung hierfür ist die Arbeit mit classList und enthält.
Ich habe es so gemacht:
Sie benötigen also Ihr Element und überprüfen die Liste der Klassen. Wenn eine der Klassen mit der von Ihnen gesuchten identisch ist, wird true zurückgegeben, wenn nicht, wird false zurückgegeben!
quelle
Verwenden Sie etwas wie:
quelle
myHTMLSelector.classList.indexOf('the-class')
? Willst du nicht auch>=0
am Ende?[].indexOf
wennclassList
es einecontains
Methode gibt?myHTMLSelector.classList.indexOf('the-class')
Gibt den Fehler zurück, dassmyHTMLSelector.classList.indexOf is not a function
damyHTMLSelector.classList
kein Array ist. Aber ich denke, wenn man es mitArray.prototype
einer Konvertierung aufruft, passiert es. Dies unterstützt möglicherweise ältere Browser,contains
hat jedoch eine sehr gute Unterstützung.quelle
Diese 'hasClass'-Funktion funktioniert in IE8 +, FireFox und Chrome:
quelle
Nun, alle oben genannten Antworten sind ziemlich gut, aber hier ist eine kleine einfache Funktion, die ich entwickelt habe. Es funktioniert ziemlich gut.
quelle
classList
es einecontains
Methode gibt?Was denkst du über diesen Ansatz?
https://jsfiddle.net/5sv30bhe/
quelle
class="nothatClassIsnt"
?Hier ist der einfachste Weg:
quelle