Ich habe ein Element, das bereits eine Klasse hat:
<div class="someclass">
<img ... id="image1" name="image1" />
</div>
Jetzt möchte ich eine JavaScript-Funktion erstellen, die der Klasse eine hinzufügt div
(nicht ersetzen, sondern hinzufügen).
Wie kann ich das machen?
javascript
css
dom-manipulation
Blankman
quelle
quelle
element.classList.add("my-class")
stattdessen.Antworten:
Wenn Sie nur auf moderne Browser abzielen:
Verwenden Sie element.classList.add , um eine Klasse hinzuzufügen:
Und element.classList.remove , um eine Klasse zu entfernen:
Wenn Sie Internet Explorer 9 oder niedriger unterstützen müssen:
Fügen Sie dem Leerzeichen ein Leerzeichen und den Namen Ihrer neuen Klasse hinzu
className
Eigenschaft des Elements . Setzen Sie zuerst einid
auf das Element, damit Sie leicht eine Referenz erhalten können.Dann
Beachten Sie das Leerzeichen vor
otherclass
. Es ist wichtig, den Speicherplatz einzuschließen, da sonst vorhandene Klassen, die davor stehen, in die Klassenliste aufgenommen werden.Siehe auch element.className auf MDN .
quelle
Der einfachste Weg, dies ohne Framework zu tun, ist die Verwendung der Methode element.classList.add .
Bearbeiten: Und wenn Sie Klasse aus einem Element entfernen möchten -
Ich bevorzuge es, keinen leeren Raum hinzuzufügen und die Eingabe selbst zu duplizieren (was bei Verwendung des
document.className
Ansatzes erforderlich ist ). Es gibt einige Browser-Einschränkungen , die Sie jedoch mithilfe von Polyfills umgehen können .quelle
Finden Sie Ihr Zielelement "d", wie Sie möchten, und dann:
Sie können dies auf cleverere Weise einwickeln, um das Vorhandensein zu überprüfen und den Platzbedarf zu überprüfen.
quelle
split
den Klassennamen auf Leerzeichen, zu entfernen, entfernen Sie den gewünschten Namen aus dem resultierenden Array und dannjoin
das Array erneut ... oder verwenden Sieelement.classList.remove
.Klasse hinzufügen
Kreuzkompatibel
Im folgenden Beispiel fügen wir
classname
dem<body>
Element ein hinzu. Dies ist IE-8-kompatibel.Dies ist eine Abkürzung für Folgendes.
Performance
Wenn Sie sich mehr um die Leistung als um die Kompatibilität kümmern, können Sie diese auf 4% schneller verkürzen.
Bequemlichkeit
Alternativ können Sie jQuery verwenden, die resultierende Leistung ist jedoch erheblich langsamer. 94% langsamer laut jsPerf
Klasse entfernen
Performance
Die selektive Verwendung von jQuery ist die beste Methode zum Entfernen einer Klasse, wenn Sie sich mit der Leistung befassen
Ohne jQuery ist es 32% langsamer
Verweise
Prototyp verwenden
Verwenden von YUI
quelle
a.classList ? ...
) einen Geschwindigkeitsunterschied zur normalen Version ( ) habenif (a.classList) { ....
?classList.remove()
. Warum hast du es nicht benutzt? Es ist viel schneller als jQuery jsperf.com/remove-class-vanilla-vs-jqueryclassList
für alles verwendet, außer um Klassen zu entfernen, deshalb frage ich es.Ein weiterer Ansatz zum Hinzufügen der Klasse zum Element mithilfe von reinem JavaScript
Zum Hinzufügen einer Klasse:
Zum Entfernen der Klasse:
quelle
Wenn die Arbeit, die ich mache, die Verwendung einer Bibliothek nicht rechtfertigt, verwende ich diese beiden Funktionen:
quelle
if( cn.indexOf( classname ) != -1 ) { return; }
Beachten Sie, dass dies fehlschlägt, wenn Sie die Klasse "btn" hinzufügen, wobei die Klasse "btn-info" bereits vorhanden ist.element.className.split(" ");
, um das hier gemeldete Problem @AlexandreDieulot zu verhindern.Angenommen, Sie tun mehr als nur das Hinzufügen dieser einen Klasse (z. B. haben Sie asynchrone Anforderungen usw.), würde ich eine Bibliothek wie Prototype oder jQuery empfehlen .
Dies macht fast alles, was Sie tun müssen (einschließlich dieser), sehr einfach.
Nehmen wir also an, Sie haben jetzt jQuery auf Ihrer Seite. Sie können Code wie diesen verwenden, um einem Element einen Klassennamen hinzuzufügen (in diesem Fall beim Laden):
Überprüfen Sie den jQuery API-Browser auf andere Dinge.
quelle
Mit der Methode classList.add OR classList.remove können Sie eine Klasse zu einem Element hinzufügen oder daraus entfernen.
Der obige Code fügt nameElem eine Klasse "anyclass" hinzu (und ersetzt sie NICHT). Ebenso können Sie die classList.remove () -Methode verwenden, um eine Klasse zu entfernen.
quelle
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 ä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.)
quelle
Wenn Sie jQuery nicht verwenden und ältere Browser unterstützen möchten:
quelle
Ich weiß, dass IE9 offiziell heruntergefahren wird und wir es mit
element.classList
den oben genannten erreichen können, aber ich habe nur versucht zu lernen, wie es ohne funktioniertclassList
dass ich es mithilfe vieler Antworten oben lernen könnte.Der folgende Code erweitert viele der obigen Antworten und verbessert sie, indem das Hinzufügen doppelter Klassen vermieden wird.
quelle
Ich denke auch, dass der schnellste Weg darin besteht, Element.prototype.classList wie in es5 zu verwenden:
document.querySelector(".my.super-class").classList.add('new-class')
aber in ie8 gibt es kein Element.prototype.classList, trotzdem können Sie es mit diesem Snippet polyfillieren (es kann frei bearbeitet und verbessert werden ):quelle
Um näher darauf einzugehen, was andere gesagt haben, werden mehrere CSS-Klassen in einer einzigen Zeichenfolge kombiniert, die durch Leerzeichen begrenzt ist. Wenn Sie es also fest codieren möchten, sieht es einfach so aus:
Von dort aus können Sie leicht das zum Hinzufügen einer neuen Klasse erforderliche Javascript ableiten. Fügen Sie einfach ein Leerzeichen gefolgt von der neuen Klasse an die className-Eigenschaft des Elements an. Wenn Sie dies wissen, können Sie auch eine Funktion schreiben, um eine Klasse später zu entfernen, falls dies erforderlich sein sollte.
quelle
So fügen Sie Elementklassen auf einfache Weise hinzu, entfernen oder überprüfen sie:
quelle
Sie können einen modernen Ansatz verwenden, der jQuery ähnelt
Wenn Sie nur ein Element ändern müssen, das erste, das JS in DOM findet, können Sie Folgendes verwenden:
Denken Sie daran, vorher ein Leerzeichen zu lassen Klassennamen .
Wenn Sie mehrere Klassen haben, in denen Sie eine neue Klasse hinzufügen möchten, können Sie diese folgendermaßen verwenden
quelle
Ich denke, es ist besser, reines JavaScript zu verwenden, das wir im DOM des Browsers ausführen können.
Hier ist die funktionale Art, es zu verwenden. Ich habe ES6 verwendet, kann aber auch ES5 und Funktionsausdruck oder Funktionsdefinition verwenden, je nachdem, was für Ihren JavaScript StyleGuide geeignet ist.
quelle
Probe mit reinem JS. Im ersten Beispiel erhalten wir die ID unseres Elements und fügen zB 2 Klassen hinzu.
Im zweiten Beispiel erhalten wir den Klassennamen des Elements und fügen 1 weitere hinzu.
quelle
Für diejenigen, die Lodash verwenden und die
className
Zeichenfolge aktualisieren möchten :quelle
Geben Sie dem Div zuerst eine ID. Rufen Sie dann die Funktion appendClass auf:
quelle
indexOf
ist eine naive Lösung und hat ein Problem bereits aufgezeigt .Mit der API querySelector können Sie Ihr Element auswählen und anschließend eine Funktion mit dem Element und dem neuen Klassennamen als Parametern erstellen. Verwenden der Klassenliste für moderne Browser, sonst für IE8. Dann können Sie die Funktion nach einem Ereignis aufrufen.
quelle
Kürzeste
Code-Snippet anzeigen
quelle
ODER:
Der erste Ansatz half beim Hinzufügen der Klasse, wenn der zweite Ansatz nicht funktionierte.
Vergessen Sie nicht, einen Platz vor dem
' someclassname'
beim ersten Anflug .Zum Entfernen können Sie verwenden:
quelle
Dieser JS-Code funktioniert für mich
bietet Ersatz für Klassennamen
Zum Hinzufügen einfach verwenden
Zum Entfernen verwenden
Hoffe, das ist für jemanden hilfreich
quelle
Wenn Sie in YUI yuidom einschließen , können Sie verwenden
YAHOO.util.Dom.addClass('div1','className');
HTH
quelle