Gibt es eine Möglichkeit, mit einfachem JavaScript (nicht jQuery) zu überprüfen, ob ein Element eine Klasse enthält ?
Derzeit mache ich das:
var test = document.getElementById("test");
var testClass = test.className;
switch (testClass) {
case "class1":
test.innerHTML = "I have class1";
break;
case "class2":
test.innerHTML = "I have class2";
break;
case "class3":
test.innerHTML = "I have class3";
break;
case "class4":
test.innerHTML = "I have class4";
break;
default:
test.innerHTML = "";
}
<div id="test" class="class1"></div>
Das Problem ist, dass, wenn ich den HTML-Code in diesen ...
<div id="test" class="class1 class5"></div>
... gibt es keine genaue Übereinstimmung mehr, daher erhalte ich die Standardausgabe von nothing ( ""
). Aber ich möchte immer noch, dass die Ausgabe ist, I have class1
weil die <div>
noch die Klasse enthält.class1
.
javascript
html
css
dom
daGUY
quelle
quelle
Antworten:
Verwenden
element.classList
.contains
Methode:Dies funktioniert in allen aktuellen Browsern und es gibt Polyfills, die auch ältere Browser unterstützen.
Alternativ , wenn Sie mit älteren Browsern arbeiten und keine Polyfills verwenden möchten, um diese zu beheben, verwenden Sie
indexOf
ist richtig, aber man muss es ein wenig zwicken:Andernfalls erhalten Sie auch,
true
wenn die gesuchte Klasse Teil eines anderen Klassennamens ist.DEMO
jQuery verwendet eine ähnliche (wenn nicht dieselbe) Methode.
Auf das Beispiel angewendet:
Da dies nicht mit der switch-Anweisung zusammenarbeitet, können Sie mit diesem Code den gleichen Effekt erzielen:
Es ist auch weniger redundant;)
quelle
div
hat zwei Klassen, wird aber nur so ausgegeben,I have class1
wie Sie sie verwendenbreak
. Wenn Sie jede Klasse eines Elements ausgeben möchten, können Sie die einfach nehmenclassName
und auf Leerzeichen aufteilen. Oder was ist dein eigentliches Ziel?Die einfache und effektive Lösung ist die Methode .contains .
quelle
contains
Methode einerelement.classList
EigenschaftIn modernen Browsern können Sie einfach die folgende
contains
Methode verwendenElement.classList
:Demo
Unterstützte Browser
(von CanIUse.com )
Polyfill
Wenn Sie
Element.classList
ältere Browser verwenden möchten, aber auch ältere Browser unterstützen möchten, sollten Sie diese Polyfüllung von Eli Gray verwenden .quelle
Da er switch () verwenden möchte, bin ich überrascht, dass dies noch niemand veröffentlicht hat:
quelle
Element.matches ()
element.matches (selectorString)
Laut MDN Web Docs :
Daher können Sie verwenden,
Element.matches()
um festzustellen, ob ein Element eine Klasse enthält.Browserkompatibilität anzeigen
quelle
Hier ist ein kleiner Ausschnitt Wenn Sie überprüfen möchten, ob das Element eine Klasse enthält, ohne jQuery zu verwenden.
Dies erklärt die Tatsache, dass das Element möglicherweise mehrere durch Leerzeichen getrennte Klassennamen enthält.
ODER
Sie können diese Funktion auch dem Elementprototyp zuweisen.
Und lösen Sie es so aus (sehr ähnlich der
.hasClass()
Funktion von jQuery ):quelle
Ein vereinfachter Oneliner: 1
1
indexOf
für Arrays wird vom IE (natürlich) nicht unterstützt. Dafür gibt es im Netz viele Affenfelder.quelle
-
als Wortgrenzen betrachtet werden. ZB suchenfoo
und die Klasse istfoo-bar
Erträgetrue
.Das ist ein bisschen alt, aber vielleicht findet jemand meine Lösung hilfreich:
quelle
className
ist nur eine Zeichenfolge, sodass Sie mit der regulären Funktion indexOf prüfen können, ob die Liste der Klassen eine andere Zeichenfolge enthält.quelle
class
im obigen Beispiel?foo
für ein Element suchen, das diefoobar
Klasse enthält.Ich kenne viele Antworten, aber die meisten sind für zusätzliche Funktionen und zusätzliche Klassen. Dies ist die, die ich persönlich benutze; viel sauberer und viel weniger Codezeilen!
quelle
<body class="category-page">
document.body.className.match('page')
page
\b
zB mit aufgelöst werden/\bpage\b/g
, da es sich um Regex handelt (Hinweis: muss verwendet werden/ /g
).Hier ist eine triviale Lösung, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird:
quelle
Wenn das Element nur einen Klassennamen hat, können Sie ihn schnell überprüfen, indem Sie das Klassenattribut abrufen. Die anderen Antworten sind viel robuster, aber dies hat sicherlich Anwendungsfälle.
quelle
Ich habe eine Prototypmethode erstellt, die
classList
, wenn möglich, auf Folgendes zurückgreiftindexOf
:Testseite
quelle
Felix 'Trick, Leerzeichen hinzuzufügen, um den Klassennamen und die gesuchte Zeichenfolge zu flankieren, ist der richtige Ansatz, um festzustellen, ob die Elemente die Klasse haben oder nicht.
Um je nach Klasse ein unterschiedliches Verhalten zu erzielen, können Sie Funktionsreferenzen oder Funktionen in einer Karte verwenden:
quelle
Ich würde Poly die classList-Funktionalität füllen und die neue Syntax verwenden. Auf diese Weise verwendet ein neuerer Browser die neue Implementierung (die viel schneller ist) und nur alte Browser nehmen den Leistungseinbruch aus dem Code.
https://github.com/remy/polyfills/blob/master/classList.js
quelle
Dies ist ein bisschen anders, aber wenn Sie ein Ereignis haben, das den Wechsel auslöst, können Sie auf Klassen verzichten:
Du kannst tun
.replace(/[0-9]/g, '')
entfernt Ziffern vonid
.Es ist ein bisschen hackig, funktioniert aber für lange Schalter ohne zusätzliche Funktionen oder Schleifen
quelle
Unter diesem Codepen-Link können Sie ein Element schneller und einfacher überprüfen, wenn es eine bestimmte Klasse hat. Verwenden Sie dazu Vanille-JavaScript ~!
hasClass (Vanilla JS)
quelle
Dies wird auf IE8 + unterstützt.
Zuerst prüfen wir, ob
classList
dies der Fall ist, und können diecontains
von IE10 + unterstützte Methode verwenden. Wenn wir mit IE9 oder 8 arbeiten, wird auf einen regulären Ausdruck zurückgegriffen, der nicht so effizient ist, aber eine prägnante Polyfüllung darstellt.Wenn Sie mit babel kompilieren, können Sie alternativ einfach Folgendes verwenden:
el.classList.contains(className);
quelle
Probier diese:
quelle
foo-bar
und nach suchenfoo
.a-zA-Z0-9_
] als Wortzeichen betrachtet. Für Klassennamen mit einem Minuszeichen funktioniert dies also nicht .Ich denke, dass die perfekte Lösung dies sein wird
quelle
In welchem Element befindet sich derzeit die Klasse '.bar'? Hier ist eine andere Lösung, aber es liegt an Ihnen.
jsfiddle Demo
Natürlich ist dies nur eine Suche nach 1 einfachen Element
<img>
(/Image/g
), aber Sie können alles in ein Array wie<li>
is/LI/g
,<ul>
=/UL/g
usw. einfügen .quelle
Nur um die Antwort für Personen zu ergänzen, die versuchen, Klassennamen in Inline-SVG-Elementen zu finden.
Ändern Sie die
hasCLass()
Funktion in:Anstatt die
className
Eigenschaft zu verwenden, müssen Sie diegetAttribute()
Methode verwenden, um den Klassennamen abzurufen.quelle
Ich habe diese Funktionen für meine Website erstellt, ich verwende nur Vanille-Javascript, vielleicht hilft es jemandem. Zuerst habe ich eine Funktion erstellt, um ein beliebiges HTML-Element abzurufen:
Dann die Funktion, die die zu entfernende Klasse erhält, und die Auswahl des Elements:
Jetzt können Sie es so verwenden:
Hoffe es wird helfen.
quelle
Tipp: Versuchen Sie, Abhängigkeiten von jQuery in Ihren Projekten so weit wie möglich zu entfernen - VanillaJS .
document.firstElementChild
Gibt das<html>
Tag zurück, dann gibt dasclassList
Attribut alle hinzugefügten Klassen zurück.quelle
Für mich ist der eleganteste und schnellste Weg, dies zu erreichen:
quelle