adding a class in javascript

adding a class in javascript

Stell dir vor, du sitzt an einem Dienstagabend im Büro, die Deadline für den Launch des neuen Kundenportals ist morgen früh. Du hast den ganzen Tag damit verbracht, die Benutzeroberfläche zu verfeinern. In deinem Skript wimmelt es von kleinen Befehlen für Adding A Class In Javascript, um Buttons beim Klicken einzufärben oder Menüs auszuklappen. Alles sieht in deinem Chrome-Browser perfekt aus. Dann kommt die Nachricht vom Tester: Auf älteren Tablets und bei langsamer Verbindung ruckelt die Seite so stark, dass sie unbedienbar ist. Der Browser ist mit dem ständigen Neuzeichnen der Elemente völlig überfordert. Ich habe das schon oft erlebt: Entwickler verbrennen Tausende von Euro an Arbeitszeit, weil sie denken, dass das einfache Hinzufügen einer Klasse eine harmlose Aktion ist. In der Realität lösen unbedachte Änderungen am DOM (Document Object Model) Kettenreaktionen aus, die die Performance in den Keller ziehen und den Wartungsaufwand verdoppeln.

Die Falle der direkten Manipulation beim Adding A Class In Javascript

Der größte Fehler, den ich bei Junioren und sogar bei gestandenen Entwicklern sehe, ist der kopflose Einsatz von Manipulationen mitten in komplexen Schleifen oder Rechenoperationen. Man denkt sich: „Ich muss nur kurz diese Farbe ändern“, und feuert einen Befehl ab. Doch jedes Mal, wenn du den Zustand eines Elements änderst, muss der Browser eventuell das gesamte Layout neu berechnen.

In meiner Erfahrung führt das bei großen Listen dazu, dass die Benutzeroberfläche für mehrere hundert Millisekunden einfriert. Wenn du das bei hundert Elementen gleichzeitig machst, summiert sich das. Ich habe Projekte gesehen, bei denen die Ladezeit der Interaktionen von 20 Millisekunden auf über 2 Sekunden anstieg, nur weil jemand nicht verstanden hat, wie die Rendering-Engine funktioniert. Der Browser ist kein Malprogramm, sondern ein hochkomplexes Rechenwerk. Wenn du ihm sagst, er soll eine Klasse hinzufügen, während er gerade noch mit dem Scrollen oder einer Animation beschäftigt ist, bricht die Bildrate ein. Das wirkt billig und unprofessionell.

Die Lösung ist hier nicht technischer Natur, sondern eine Frage der Disziplin. Man trennt die Logik strikt von der Darstellung. Wer wahllos Klassen im Code verteilt, baut sich eine technische Schuld auf, die später kaum noch zu tilgen ist. Es geht darum, Zustände zu definieren, statt Einzelanweisungen zu geben.

Warum das Überschreiben von Klassen dein CSS ruiniert

Ein weiterer teurer Fehler ist das Ignorieren der Spezifität. Viele nutzen JavaScript, um Klassen hinzuzufügen, nur um dann festzustellen, dass die neuen Styles im CSS gar nicht greifen, weil eine andere Regel stärker ist. Was machen die meisten? Sie nutzen !important im Stylesheet. Das ist der Anfang vom Ende einer sauberen Codebasis.

Ich habe ein Projekt übernommen, bei dem über 400 Mal !important verwendet wurde, nur weil die Entwickler die Kontrolle über ihre Zustände verloren hatten. Jede neue Änderung dauerte Stunden, weil man erst herausfinden musste, welche Regel gerade was überschreibt. Das hat den Kunden am Ende einen fünfstelligen Betrag gekostet, nur um den Mist wieder geradezubiegen.

Das Problem mit className vs classList

Oft sehe ich alten Code, der die gesamte Klassenliste eines Elements als String überschreibt. Das ist gefährlich. Wenn du element.className = 'active' schreibst, löschst du alle anderen Klassen, die vielleicht für das Layout oder andere Funktionen wichtig sind. Die moderne Methode über ein spezielles Objekt ist der einzige Weg, der in der Praxis Bestand hat. Es schützt dich davor, versehentlich bestehende Logik zu zerstören. Wer heute noch mit Strings hantiert, um Klassen zu verwalten, riskiert instabile Oberflächen, die bei jeder kleinen Änderung an einer anderen Stelle im CSS auseinanderfallen.

Der Performance-Killer Layout Thrashing

Das hier ist der Punkt, an dem das Geld wirklich verbrannt wird. Layout Thrashing passiert, wenn du abwechselnd Werte aus dem DOM liest und sie schreibst – zum Beispiel durch Adding A Class In Javascript.

Ein reales Beispiel aus meiner Praxis: Ein Team wollte eine Bildergalerie bauen, die sich beim Scrollen anpasst. Sie lasen die Position eines Bildes (Read), fügten eine Klasse hinzu (Write), lasen das nächste Bild (Read) und fügten wieder eine Klasse hinzu (Write). Der Browser musste für jedes einzelne Bild das komplette Layout neu berechnen. Die Seite wurde unbenutzbar.

Ein Vorher-Nachher-Vergleich verdeutlicht das Problem: Im schlechten Szenario dauerte die Verarbeitung von 50 Elementen knapp 150 Millisekunden, was für das menschliche Auge als deutliches Ruckeln wahrnehmbar ist. Der Code sprang ständig zwischen Lesen und Schreiben hin und her. Nachdem wir den Prozess umgestellt hatten – zuerst alle Positionen in einem Rutsch lesen, dann alle Klassen in einem einzigen Durchgang schreiben – sank die Zeit auf unter 10 Millisekunden. Der Browser konnte alle Änderungen in einem einzigen Frame verarbeiten. Das ist der Unterschied zwischen einer Seite, die sich flüssig anfühlt, und einer, die Nutzer frustriert wegklicken lässt.

Logik in CSS statt in JavaScript verlagern

Ein Fehler, der oft aus Unwissenheit begangen wird, ist der Versuch, alles mit JavaScript zu lösen. Ich sehe oft Skripte, die prüfen, ob ein Element sichtbar ist, und dann mühsam Klassen für Animationen hinzufügen und wieder entfernen. Das ist oft gar nicht nötig.

Nicht verpassen: iphone 15 pro back cover

Viele Interaktionen lassen sich heute mit CSS-Pseudoklassen wie :hover, :focus-within oder sogar der neuen :has() Auswahl lösen. JavaScript sollte nur den kleinstmöglichen Anstoß geben. Wenn du eine Klasse an ein Eltern-Element hängst, kann das CSS den Rest erledigen. Das spart dir Dutzende Zeilen Code und verringert die Fehleranfälligkeit massiv.

Ich erinnere mich an eine Navigationsleiste, die mit über 200 Zeilen JavaScript gesteuert wurde. Es gab Fehler beim schnellen Drüberfahren mit der Maus, die Menüs blieben offen stehen oder flackerten. Wir haben das gesamte System umgebaut: Nur noch eine einzige Klasse am Hauptcontainer wurde per Skript umgeschaltet. Die gesamte Animation und Steuerung der Untermenüs übernahm das CSS. Das Ergebnis: Null Fehleranfälligkeit und eine Reduktion des Codes um 90 Prozent. Weniger Code bedeutet weniger Stellen, an denen etwas kaputtgehen kann.

Die Gefahr von Event-Listenern und Speicherlecks

Wenn du Klassen als Reaktion auf Events hinzufügst, läufst du Gefahr, Speicherlecks zu produzieren, wenn du nicht aufpasst. Besonders bei Single Page Applications (SPAs) ist das ein Problem.

Stell dir vor, du hast eine Komponente, die jedes Mal, wenn sie geladen wird, einen Event-Listener registriert, der eine Klasse umschaltet. Wenn diese Komponente zerstört wird, der Listener aber im Speicher bleibt, hast du ein Problem. Mit der Zeit wird die Anwendung immer langsamer, bis der Browser des Nutzers abstürzt. Ich habe Anwendungen gesehen, die nach zehn Minuten Nutzung 2 Gigabyte Arbeitsspeicher gefressen haben, nur weil die Entwickler die Bindung der Events an die DOM-Elemente und deren Klassenänderungen nicht sauber gelöst hatten.

Es ist eine harte Lektion: JavaScript verzeiht keine Schlamperei bei der Speicherverwaltung. Du musst sicherstellen, dass jede Interaktion, die du startest, auch wieder sauber beendet wird. Das bedeutet, Listener zu entfernen, wenn das Element nicht mehr da ist. Wer das ignoriert, baut Software mit eingebautem Verfallsdatum.

Namenskonventionen sind kein Luxus sondern Überlebensstrategie

Viele scheitern nicht an der Technik, sondern an der Organisation. Klassen wie .active, .hidden oder .red sind in kleinen Projekten okay, in großen Systemen sind sie der sichere Weg ins Chaos.

Wenn du eine Klasse hinzufügst, musst du sicher sein, dass sie nicht mit anderen Stilen kollidiert. Ich habe erlebt, wie eine globale .active-Klasse das gesamte Design eines Dashboards zerschlagen hat, weil sie an einer Stelle hinzugefügt wurde, wo sie eigentlich nur für ein kleines Icon gedacht war. Plötzlich waren alle Texte fett und der Hintergrund blau, weil ein anderer Entwickler dieselbe Klasse für ein anderes Modul benutzt hatte.

👉 Siehe auch: anker usb to type

Die Lösung in der Praxis ist ein System wie BEM (Block Element Modifier) oder die Nutzung von Scoped CSS. Das kostet am Anfang vielleicht 20 Prozent mehr Zeit bei der Planung, spart dir aber später Wochen an Fehlersuche. Es geht nicht darum, „schönen“ Code zu schreiben. Es geht darum, dass du am Freitagabend nach Hause gehen kannst, ohne Angst zu haben, dass das CSS beim Kunden explodiert, nur weil du eine kleine Statusänderung implementiert hast.

Realitätscheck

Kommen wir zum Punkt: Das reine Handwerk, wie man ein Element anspricht und ihm einen Namen gibt, lernt jeder Anfänger in fünf Minuten. Das ist nicht die Kunst. Die wahre Herausforderung in der professionellen Entwicklung ist es, diese Änderungen so zu steuern, dass sie skalierbar, performant und wartbar bleiben.

Es gibt keine magische Abkürzung. Wenn du denkst, du kannst einfach wild drauflos programmieren und „das wird schon passen“, wirst du früher oder später gegen eine Wand laufen. Entweder wird deine Seite bei hoher Last unbenutzbar, oder dein Code wird so komplex, dass sich niemand mehr traut, ihn anzufassen.

In der echten Welt der Softwareentwicklung gewinnt nicht derjenige, der die cleversten Tricks kennt, sondern derjenige, der am wenigsten Chaos anrichtet. Sei ehrlich zu dir selbst: Hast du wirklich die Kontrolle über jeden Zustand deiner Anwendung? Weißt du genau, was passiert, wenn zehn Events gleichzeitig feuern? Wenn nicht, dann ist es an der Zeit, die Grundlagen der Browser-Performance und der CSS-Architektur ernst zu nehmen. Alles andere ist nur Glücksspiel mit der Zeit und dem Geld deines Arbeitgebers oder Kunden. Es ist nun mal so: Ein stabiles System braucht Struktur, keine schnellen Hacks.

TS

Thomas Schäfer

Thomas Schäfer verfolgt politische und soziale Debatten mit kritischem Blick und journalistischer Verantwortung.