Wie kann ich eine Klasse eines HTML-Elements als Reaktion auf ein onclick
Ereignis mithilfe von JavaScript ändern ?
javascript
html
dom
Nathan Smith
quelle
quelle
element.setAttribute(name, value);
Ersetzenname
durchclass
. Ersetzenvalue
Sie die Klasse durch einen beliebigen Namen, der in Anführungszeichen gesetzt ist. Dadurch muss nicht die aktuelle Klasse gelöscht und eine andere hinzugefügt werden. Dieses jsFiddle-Beispiel zeigt den vollständigen Arbeitscode .<input type='button' onclick='addNewClass(this)' value='Create' />
und im Javascript-Abschnitt:function addNewClass(elem){ elem.className="newClass";
} OnlineAntworten:
Moderne HTML5-Techniken zum Klassenwechsel
Moderne Browser haben classList hinzugefügt , das Methoden bereitstellt, mit denen Klassen einfacher bearbeitet werden können, ohne dass eine Bibliothek erforderlich ist:
Leider funktionieren diese in Internet Explorer vor Version 10 nicht, obwohl es eine Unterlegscheibe gibt , mit der IE8 und IE9 unterstützt werden können, die auf dieser Seite verfügbar sind . Es wird jedoch immer mehr unterstützt .
Einfache browserübergreifende Lösung
Die Standardmethode für die Auswahl eines Elements in JavaScript ist die Verwendung. Dies wird in
document.getElementById("Id")
den folgenden Beispielen verwendet. Sie können Elemente natürlich auch auf andere Weise abrufen und in der richtigen Situation einfach verwenden. Einethis
ausführliche Beschreibung hierzu liegt jedoch außerhalb des Rahmens der Antwort.So ändern Sie alle Klassen für ein Element:
Um alle vorhandenen Klassen durch eine oder mehrere neue Klassen zu ersetzen, legen Sie das Attribut className fest:
(Sie können eine durch Leerzeichen getrennte Liste verwenden, um mehrere Klassen anzuwenden.)
So fügen Sie einem Element eine zusätzliche Klasse hinzu:
Um einem Element eine Klasse hinzuzufügen, ohne vorhandene Werte zu entfernen / zu beeinflussen, fügen Sie ein Leerzeichen und den neuen Klassennamen wie folgt hinzu:
So entfernen Sie eine Klasse aus einem Element:
Um eine einzelne Klasse aus einem Element zu entfernen, ohne andere potenzielle Klassen zu beeinflussen, ist ein einfaches Ersetzen des regulären Ausdrucks erforderlich:
Eine Erklärung für diesen regulären Ausdruck lautet wie folgt:
Das
g
Flag weist das Ersetzen an, es nach Bedarf zu wiederholen, falls der Klassenname mehrmals hinzugefügt wurde.So überprüfen Sie, ob eine Klasse bereits auf ein Element angewendet wurde:
Der gleiche reguläre Ausdruck, der oben zum Entfernen einer Klasse verwendet wurde, kann auch verwendet werden, um zu überprüfen, ob eine bestimmte Klasse vorhanden ist:
Zuweisen dieser Aktionen zu Onclick-Ereignissen:
Es ist zwar möglich, JavaScript direkt in die HTML-Ereignisattribute (z. B.
onclick="this.className+=' MyClass'"
) zu schreiben, dies wird jedoch nicht empfohlen. Insbesondere bei größeren Anwendungen wird durch die Trennung von HTML-Markup und JavaScript-Interaktionslogik ein besser wartbarer Code erzielt.Der erste Schritt, um dies zu erreichen, besteht darin, eine Funktion zu erstellen und die Funktion im onclick-Attribut aufzurufen, zum Beispiel:
(Es ist nicht erforderlich, diesen Code in Skript-Tags zu haben. Dies dient lediglich der Kürze und möglicherweise ist es besser, das JavaScript in eine bestimmte Datei aufzunehmen.)
Der zweite Schritt besteht darin, das Ereignis onclick aus dem HTML-Code in JavaScript zu verschieben, z. B. mithilfe von addEventListener
(Beachten Sie, dass der Teil window.onload erforderlich ist, damit der Inhalt dieser Funktion ausgeführt wird, nachdem der HTML-Code vollständig geladen wurde. Andernfalls ist MyElement möglicherweise nicht vorhanden, wenn der JavaScript-Code aufgerufen wird, sodass diese Zeile fehlschlägt.)
JavaScript-Frameworks und -Bibliotheken
Der obige Code ist alles in Standard-JavaScript. Es ist jedoch üblich, entweder ein Framework oder eine Bibliothek zu verwenden, um allgemeine Aufgaben zu vereinfachen und von behobenen Fehlern und Randfällen zu profitieren, an die Sie beim Schreiben Ihres Codes möglicherweise nicht denken.
Während einige Leute es für übertrieben halten, ein ~ 50-KB-Framework zum einfachen Ändern einer Klasse hinzuzufügen, ist es eine Überlegung wert, wenn Sie eine erhebliche Menge an JavaScript-Arbeit ausführen oder etwas, das möglicherweise ein ungewöhnliches browserübergreifendes Verhalten aufweist.
(Eine Bibliothek besteht grob gesagt aus einer Reihe von Werkzeugen, die für eine bestimmte Aufgabe entwickelt wurden, während ein Framework im Allgemeinen mehrere Bibliotheken enthält und eine vollständige Reihe von Aufgaben ausführt.)
Die obigen Beispiele wurden unten mit jQuery reproduziert , der wahrscheinlich am häufigsten verwendeten JavaScript-Bibliothek (obwohl es auch andere gibt, die es wert sind, untersucht zu werden).
(Beachten Sie, dass
$
hier das jQuery-Objekt ist.)Klassen mit jQuery ändern:
Darüber hinaus bietet jQuery eine Verknüpfung zum Hinzufügen einer Klasse, wenn diese nicht zutreffend ist, oder zum Entfernen einer Klasse, die Folgendes tut:
Zuweisen einer Funktion zu einem Klickereignis mit jQuery:
oder ohne Ausweis:
quelle
class="button MyClass MyClass MyClass"
Sie könnten auch einfach tun:
Und um eine Klasse umzuschalten (entfernen, falls vorhanden, sonst hinzufügen):
quelle
classList
Unterlegscheibe.classList
.In einem meiner alten Projekte, in denen jQuery nicht verwendet wurde, habe ich die folgenden Funktionen zum Hinzufügen, Entfernen und Überprüfen, ob das Element eine Klasse hat, erstellt:
Wenn ich beispielsweise
onclick
der Schaltfläche eine Klasse hinzufügen möchte , kann ich Folgendes verwenden:Inzwischen wäre es sicher besser, jQuery zu verwenden.
quelle
Sie können
node.className
wie folgt verwenden:Dies sollte in IE5.5 und höher gemäß PPK funktionieren .
quelle
Wow, überrascht, dass es hier so viele Overkill-Antworten gibt ...
quelle
Verwenden von reinem JavaScript-Code:
quelle
Das funktioniert bei mir:
quelle
el.setAttribute('class', newClass)
oder besserel.className = newClass
. Aber nichtel.setAttribute('className', newClass)
.Sie können auch das HTMLElement-Objekt erweitern, um Methoden zum Hinzufügen, Entfernen, Umschalten und Überprüfen von Klassen ( gist ) hinzuzufügen :
Und dann einfach so verwenden (beim Klicken wird die Klasse hinzugefügt oder entfernt):
Hier ist eine Demo .
quelle
Um Informationen aus einem anderen beliebten Framework, Google Closures, hinzuzufügen, sehen Sie sich deren Dom / Klassen- Klasse an:
Eine Option zum Auswählen des Elements ist die Verwendung von goog.dom.query mit einem CSS3-Selektor:
quelle
Ein paar kleine Anmerkungen und Verbesserungen zu den vorherigen regulären Ausdrücken:
Sie sollten dies global tun, falls die Klassenliste mehr als einmal den Klassennamen enthält. Und wahrscheinlich möchten Sie Leerzeichen von den Enden der Klassenliste entfernen und mehrere Leerzeichen in ein Leerzeichen konvertieren, um zu verhindern, dass Leerzeichen ausgeführt werden. Keines dieser Dinge sollte ein Problem sein, wenn der einzige Code, der mit den Klassennamen verknüpft ist, den folgenden regulären Ausdruck verwendet und einen Namen entfernt, bevor er hinzugefügt wird. Aber. Nun, wer weiß, wer sich vielleicht mit der Klassennamenliste beschäftigt.
Bei diesem regulären Ausdruck wird die Groß- und Kleinschreibung nicht berücksichtigt, sodass Fehler in Klassennamen auftreten können, bevor der Code in einem Browser verwendet wird, bei dem Groß- und Kleinschreibung in Klassennamen nicht berücksichtigt wird.
quelle
Ändern Sie die CSS-Klasse eines Elements mit JavaScript in ASP.NET :
quelle
Ich würde jQuery verwenden und so etwas schreiben:
Dieser Code fügt eine Funktion hinzu, die aufgerufen werden soll, wenn auf ein Element der ID some-element geklickt wird. Die Funktion anhängt geklickt , um das Element der Klasse Attribut , wenn es nicht bereits ein Teil davon ist, und entfernt sie , wenn es da ist.
Ja, Sie müssen einen Verweis auf die jQuery-Bibliothek auf Ihrer Seite hinzufügen, um diesen Code verwenden zu können, aber zumindest können Sie sicher sein, dass die meisten Funktionen in der Bibliothek in nahezu allen modernen Browsern funktionieren, und Sie sparen Zeit bei der Implementierung Ihren eigenen Code, um dasselbe zu tun.
Vielen Dank
quelle
jQuery
in seiner langen Form schreiben .jQuery(function($) { });
stellt$
in allen Fällen innerhalb der Funktion zur Verfügung.Die Linie
sollte sein:
quelle
Ändern Sie die Klasse eines Elements in Vanilla JavaScript mit IE6-Unterstützung
Sie können versuchen, die Knoteneigenschaft
attributes
zu verwenden, um die Kompatibilität mit alten Browsern auch mit IE6 aufrechtzuerhalten:quelle
Hier ist meine voll funktionsfähige Version:
Verwendungszweck:
quelle
foobar
unterbrochen, wenn Sie versuchen, die Klasse zu entfernenfoo
. Das JS in den intrinsischen Ereignishandlerattributen wurde vor der Bearbeitung beschädigt. Die 4 Jahre alte akzeptierte Antwort ist viel besser.foobar
Problem. Sehen Sie den Test hierHier ist eine toggleClass zum Umschalten / Hinzufügen / Entfernen einer Klasse für ein Element:
siehe jsfiddle
Siehe auch meine Antwort hier zum dynamischen Erstellen einer neuen Klasse
quelle
Ich verwende die folgenden Vanille-JavaScript-Funktionen in meinem Code. Sie verwenden reguläre Ausdrücke und
indexOf
erfordern keine Anführungszeichen in regulären Ausdrücken.Sie können element.classList auch in modernen Browsern verwenden.
quelle
DIE OPTIONEN.
Im Folgenden finden Sie einige Beispiele für Stil und Klassenliste, mit denen Sie sehen können, welche Optionen Ihnen zur Verfügung stehen und wie
classList
Sie das tun können, was Sie möchten.style
vs.classList
Der Unterschied zwischen
style
undclassList
ist , dass mitstyle
Ihnen zu den Style - Eigenschaften des Elements sind hinzufügen, aberclassList
irgendwie ist die Steuerung der Klasse (n) des Elements (add
,remove
,toggle
,contain
), werde ich Ihnen zeigen , wie das verwenden ,add
undremove
da diese Verfahren sind die beliebtesten.Stilbeispiel
Wenn Sie
margin-top
einem Element eine Eigenschaft hinzufügen möchten , gehen Sie folgendermaßen vor:classList Beispiel
Lassen Sie sagen , wir haben
<div class="class-a class-b">
, in diesem Fall haben wir zwei Klassen in unserem div Element hinzugefügt schon,class-a
undclass-b
, und wir wollen , welche Klassen steuernremove
und was Klasseadd
. Das ist woclassList
wird es praktisch.Entfernen
class-b
Hinzufügen
class-c
quelle
Ich dachte nur, ich würde das einwerfen:
quelle
Sagen
myElement.classList="new-class"
Sie einfach, es sei denn, Sie müssen andere vorhandene Klassen pflegen. In diesem Fall können Sie dieclassList.add, .remove
Methoden verwenden.quelle
OK, ich denke in diesem Fall sollten Sie jQuery verwenden oder Ihre eigenen Methoden in reinem Javascript schreiben. Ich bevorzuge es, meine eigenen Methoden hinzuzufügen, anstatt alle jQuery in meine Anwendung einzufügen, wenn ich das aus anderen Gründen nicht benötige.
Ich möchte meinem Javascript-Framework die folgenden Methoden als Methoden hinzufügen, um einige Funktionen hinzuzufügen, die das Hinzufügen von Klassen, das Löschen von Klassen usw. ähnlich wie bei jQuery ermöglichen. Dies wird in IE9 + vollständig unterstützt, und mein Code ist in ES6 geschrieben Um sicherzustellen, dass Ihr Browser dies unterstützt oder Sie etwas wie babel verwenden, müssen Sie ansonsten die ES5-Syntax in Ihrem Code verwenden. Auch auf diese Weise finden wir das Element über die ID. Dies bedeutet, dass für das Element eine ID ausgewählt werden muss:
und Sie können sie einfach wie folgt aufrufen. Stellen Sie sich vor, Ihr Element hat die ID 'id' und die Klasse 'class'. Stellen Sie sicher, dass Sie sie als Zeichenfolge übergeben. Sie können das util wie folgt verwenden:
quelle
classList
DOM-API:Eine sehr bequeme Methode zum Hinzufügen und Entfernen von Klassen ist die
classList
DOM-API. Mit dieser API können wir alle Klassen eines bestimmten DOM-Elements auswählen, um die Liste mithilfe von Javascript zu ändern. Zum Beispiel:Wir können im Protokoll beobachten, dass wir ein Objekt mit nicht nur den Klassen des Elements, sondern auch vielen Hilfsmethoden und -eigenschaften zurückerhalten. Dieses Objekt erbt von der Schnittstelle DOMTokenList , einer Schnittstelle, die im DOM verwendet wird, um eine Reihe von durch Leerzeichen getrennten Token (wie Klassen) darzustellen.
Beispiel:
quelle
Ja, dafür gibt es viele Möglichkeiten. In der ES6-Syntax können wir leicht erreichen. Verwenden Sie diesen Code, um die Klasse zum Hinzufügen und Entfernen umzuschalten.
quelle
Die Verwendung der oben akzeptierten Antwort ist eine einfache browserübergreifende Funktion zum Hinzufügen und Entfernen von Klassen
Klasse hinzufügen:
Klasse entfernen:
quelle
Viele Antworten, viele gute Antworten.
ODER
Das ist es.
Und wenn Sie wirklich das Warum wissen und sich weiterbilden möchten, dann schlage ich vor, die Antwort von Peter Boughton zu lesen , es ist perfekt.
Hinweis:
Dies ist möglich mit ( Dokument oder Ereignis ):
getElementById()
getElementsByClassName()
querySelector()
querySelectorAll()
quelle
In Javascript gibt es eine Eigenschaft className , um den Namen der Klasse eines HTML-Elements zu ändern. Der vorhandene Klassenwert wird durch den neuen ersetzt, den Sie in className zugewiesen haben.
Gutschrift - https://jaischool.com/javascript-lang/how-to-change-class-name-of-an-html-element-in-javascript.html
quelle
Die OP-Frage war Wie kann ich die Klasse eines Elements mit JavaScript ändern?
Mit modernen Browsern können Sie dies mit einer Zeile Javascript tun :
document.getElementById('id').classList.replace('span1','span2')
Das
classList
Attribut stellt eine DOMTokenList bereit, die über verschiedene Methoden verfügt . Sie können die Klassenliste eines Elements mit einfachen Manipulationen wie add () , remove () oder replace () bearbeiten . Oder werden Sie sehr raffiniert und manipulieren Sie Klassen wie ein Objekt oder eine Map mit Schlüsseln () , Werten () , Einträgen ()Peter Boughtons Antwort ist großartig, aber jetzt ist sie über ein Jahrzehnt alt. Alle modernen Browser unterstützen jetzt DOMTokenList - siehe https://caniuse.com/#search=classList, und sogar IE11 unterstützt einige DOMTokenList-Methoden
quelle
Versuchen
Code-Snippet anzeigen
quelle
Funktionierender JavaScript-Code:
Sie können einen Arbeitscode von diesem Link herunterladen .
quelle
Hier ist einfacher jQuery-Code, um dies zu tun.
Hier,
Viel Glück.
quelle