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:
document.getElementById("MyElement").classList.add('MyClass');
document.getElementById("MyElement").classList.remove('MyClass');
if ( document.getElementById("MyElement").classList.contains('MyClass') )
document.getElementById("MyElement").classList.toggle('MyClass');
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. Eine this
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:
document.getElementById("MyElement").className = "MyClass";
(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:
document.getElementById("MyElement").className += " MyClass";
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:
document.getElementById("MyElement").className =
document.getElementById("MyElement").className.replace
( /(?:^|\s)MyClass(?!\S)/g , '' )
/* Code wrapped for readability - above is all one statement */
Eine Erklärung für diesen regulären Ausdruck lautet wie folgt:
(?:^|\s) # Match the start of the string, or any single whitespace character
MyClass # The literal text for the classname to remove
(?!\S) # Negative lookahead to verify the above is the whole classname
# Ensures there is no non-space character following
# (i.e. must be end of string or a space)
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:
if ( document.getElementById("MyElement").className.match(/(?:^|\s)MyClass(?!\S)/) )
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:
<script type="text/javascript">
function changeClass(){
// Code examples from above
}
</script>
...
<button onclick="changeClass()">My Button</button>
(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
<script type="text/javascript">
function changeClass(){
// Code examples from above
}
window.onload = function(){
document.getElementById("MyElement").addEventListener( 'click', changeClass);
}
</script>
...
<button id="MyElement">My Button</button>
(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:
$('#MyElement').addClass('MyClass');
$('#MyElement').removeClass('MyClass');
if ( $('#MyElement').hasClass('MyClass') )
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:
$('#MyElement').toggleClass('MyClass');
Zuweisen einer Funktion zu einem Klickereignis mit jQuery:
$('#MyElement').click(changeClass);
oder ohne Ausweis:
$(':button:contains(My Button)').click(changeClass);