Bisher muss ich das machen:
elem.classList.add("first");
elem.classList.add("second");
elem.classList.add("third");
Dies ist zwar in jQuery möglich, aber so
$(elem).addClass("first second third");
Ich würde gerne wissen, ob es eine native Möglichkeit zum Hinzufügen oder Entfernen gibt.
javascript
html
Enrique Moreno Zelt
quelle
quelle
Der neue Spread-Operator macht es noch einfacher, mehrere CSS-Klassen als Array anzuwenden:
quelle
DOMTokenList
anstelle eines Arrays verwenden? Ich weiß, dass eine DOMTokenList ein Array-ähnliches Objekt ist. Es ist also möglich, es mit derclassList.add()
Methode zu verwenden, oder muss die DOMTokenList in ein reales Array konvertiert werden?Die
classList
Eigenschaft stellt sicher, dass dem Element nicht unnötig doppelte Klassen hinzugefügt werden. Um diese Funktionalität zu halten, wenn Sie die Langschrift Versionen oder jQuery - Version nicht mögen, würde ich vorschlagen , eineaddMany
Additionsfunktion undremoveMany
zuDOMTokenList
(die Art derclassList
):Diese wären dann wie folgt verwendbar:
Aktualisieren
Wenn Sie gemäß Ihren Kommentaren nur dann eine benutzerdefinierte Methode für diese schreiben möchten, wenn sie nicht definiert sind, versuchen Sie Folgendes:
quelle
Da die
add()
Methode vonclassList
just nur die Übergabe separater Argumente und nicht eines einzelnen Arrays zulässt, müssen Sieadd()
mit apply aufrufen . Für das erste Argument müssen Sie dieclassList
Referenz vom selben DOM-Knoten übergeben und als zweites Argument das Array von Klassen, die Sie hinzufügen möchten:quelle
So fügen Sie einem Element eine Klasse hinzu
Entfernen Sie eine Klasse
quelle
className
. Es ist für die Leistung schrecklich (selbst das Abrufen seines Wertes führt zu einem Reflow).Neuere Versionen der DOMTokenList-Spezifikation ermöglichen mehrere Argumente für
add()
undremove()
sowie ein zweites Argumenttoggle()
, um den Status zu erzwingen.Zum Zeitpunkt des Schreibens unterstützt Chrome mehrere Argumente für
add()
undremove()
, jedoch keiner der anderen Browser. IE 10 und niedriger, Firefox 23 und niedriger, Chrome 23 und niedriger und andere Browser unterstützen das zweite Argument nichttoggle()
.Ich habe die folgende kleine Polyfüllung geschrieben, um mich zu überraschen, bis sich die Unterstützung erweitert:
Ein moderner Browser mit ES5-Konformität
DOMTokenList
wird erwartet, aber ich verwende diese Polyfüllung in mehreren speziell auf sie zugeschnittenen Umgebungen. Daher funktioniert sie hervorragend für mich, muss jedoch möglicherweise für Skripts optimiert werden, die in älteren Browserumgebungen wie IE 8 und niedriger ausgeführt werden .quelle
Hier ist eine Problemumgehung für IE 10- und 11-Benutzer, die ziemlich einfach zu sein schien.
Oder
quelle
Sie können wie unten tun
Hinzufügen
Entfernen
Referenz
TLDR;
Im einfachen Fall oben sollte das Entfernen funktionieren. Im Falle einer Entfernung sollten Sie jedoch sicherstellen, dass eine Klasse vorhanden ist, bevor Sie sie entfernen
quelle
Die Standarddefinition erlaubt nur das Hinzufügen oder Löschen einer einzelnen Klasse. Ein paar kleine Wrapper-Funktionen können das tun, was Sie verlangen:
Mit diesen Wrappern können Sie die Liste der Klassen als separate Argumente, als Zeichenfolgen mit durch Leerzeichen oder Kommas getrennten Elementen oder als Kombination angeben. Ein Beispiel finden Sie unter http://jsfiddle.net/jstoolsmith/eCqy7
quelle
Eine sehr einfache, nicht ausgefallene, aber funktionierende Lösung, von der ich glauben müsste, dass sie sehr browserübergreifend ist:
Erstellen Sie diese Funktion
Nennen Sie es so: removeAddClasses (node.classList, arrayToRemove, arrayToAdd);
... wobei arrayToRemove ein Array von zu entfernenden Klassennamen ist: ['myClass1', 'myClass2'] etcetera
... und arrayToAdd ist ein Array von Klassennamen, die hinzugefügt werden müssen: ['myClass3', 'myClass4'] usw.
quelle
Angenommen, Sie müssen eine Reihe von Klassen hinzufügen, dann können Sie die ES6-Spread-Syntax verwenden:
let classes = ['first', 'second', 'third']; elem.classList.add(...classes);
quelle
Ich mochte die Antwort von @ rich.kelly, aber ich wollte die gleiche Nomenklatur wie
classList.add()
(durch Kommas getrennte Zeichenfolgen) verwenden, also eine leichte Abweichung.So können Sie dann verwenden:
Ich muss alle Browser testen, aber das hat für Chrome funktioniert.
Sollten wir nach etwas Spezifischerem suchen als nach der Existenz von
DOMTokenList.prototype.addMany
? Was genau verursachtclassList.add()
einen Fehler in IE11?quelle
Eine weitere Polyfüllung für
element.classList
ist hier . Ich habe es über MDN gefunden .Ich füge dieses Skript hinzu und verwende es
element.classList.add("first","second","third")
wie beabsichtigt.quelle