• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

[ERLEDIGT] document.getElementById(...).classList.toggle(...); funktioniert nicht

sunil2809

Mitglied
Hallo zusammen,

ich tüftle seit einer gefühlten Ewigkeit an einem JavaScript Code herum, der aber nicht funktionieren will. Könnt ihr mir helfen?

Mein Ziel ist es, dass wenn ich auf einen Button klicke, sich die Seite in ein "Dark-Theme" umwandelt. Das klappt so auch wunderbar:

Das hier ist meine JS Funktion
Javascript:
function toggleTheme() {
    document.getElementById('nav').classList.toggle('dark');
}

Hier mein CSS
CSS:
#nav {
  background: #fff;
}

.dark #nav {
    background: #333;
}

und hier mein HTML
HTML:
<button onlick="toggleTheme()">Dark</button>

<div id="nav">
    <ul>
        <li>Home</li>
        <li>About</li>
    </ul>
</div>

Nun möchte ich aber alle Elemente bearbeiten. Also habe ich folgendes geändert:

Javascript:
function toggleTheme() {
    document.getElementsByClassName('*').classList.toggle('dark');
}

CSS:
body {
  background: #fff;
}

.dark body {
   background: #333;
}
.dark #nav {
    background: #333;
}

So funktioniert das Ganze leider nicht meher.

Ich stehe grade echt auf dem Schlauch und freue mich deswegen über jede Antwort von euch!
Linus
 
Zuletzt bearbeitet:
Werbung:
Das Problem liegt hier:
Code:
document.getElementsByClassName('*').classList.toggle('dark');
So funktioniert es in jQuery aber nicht in Vanilla-JS. getElementsByClassName liefert eine Nodelist, im wesentlichen ein Array, über das Du mit einer Schleife iterieren musst.

Danke für die schnelle Antwort, aber... was genau heißt das jetzt? :rolleyes:o_O
 
Du musst mit einer for-Schleife die ganzen Elemente der Nodelist abarbeiten, etwas so:
Code:
var elems = document.getElementsByClassName('*');
for (var i = 0; i < elems.length; i++) {
    elems[i].classList.toggle('dark');
}

Uffff, sorry falls ich nerve, aber ich bekomme das nicht hin. So der Pro in Js bin ich nämlich auch net... o_O
 
Werbung:
Das habe ich eben übersehen: Wenn du Wildcards wie * verwenden willst, musst Du querySelectorAll verwenden:
Code:
var elems = document.querySelectorAll('*');
for (var i = 0; i < elems.length; i++) {
    elems[i].classList.toggle('dark');
}

Funktioniert! DAAAAAAAAAANNNKKKKEEEEEEE!! Meine Rettung! Vielen Vielen Vielen Vielen Vielen Dank! :smile::D

Beste Grüße
Linus
 
Zurück
Oben