Auge: Regel in CSS Klasse ändern

Beitrag lesen

Hallo

Die Ausgabe von

alert('cookie: ' + document.cookie + ', html: lang=' + document.getElementsByTagName("html")[0].lang);

lautet:

cookie: lang=en, html: lang=en

Nun müsste ich wahrscheinlich das Neu Rendern der Seite herbeiführen, um die Änderung auch sichtbar zu machen.

Nein. Wird der Wert von lang im DOM geändert, ist diese Änderung real und es werden andere CSS-Regeln gültig, wenn sie denn zutreffen. Ich nehm' mal ein Beispiel von mir. Das mag nicht unbedingt elegant sein, aber es funktioniert. Zum herumspielen sollte das Skript jedenfalls reichen.


/**
 * warte, bis das DOM geladen ist
 */
window.addEventListener("DOMContentLoaded", start, false);

/**
 * registriere den Event-Listener für das aside #function_bar,
 * das ein Formular enthält, welches wiederum Buttons enthält
 */
function start() {
var listen2Click = document.getElementById("function_bar");
listen2Click.addEventListener("click", switchClass, false);
listen2Click.setAttribute("class", "js");
}

/**
 * Nachimplementation der PHP-Funktion in_array() (Helferfunktion)
 */
function inArray(item, array) {
var arrayLen = array.length;
for (p = 0; p < arrayLen; p++) { if (array[p] == item) return true; }
return false;
}

/**
 * Werte den erfolgten Klick aus, vergleiche den Wert des
 * geklickten Buttons mit den erlaubten Werten (Variable `possTargets`)
 * und weise den Wert des Buttons, wenn er nach der Prüfung mit in_array()
 * als erlaubt gilt, als Klassenname dem HTML-Element „body“ zu.
 */
function switchClass(e) {
if (!e) e = window.event;
var klickTarget = e.target;
var targetName = "";
var possTargets = ["without_rework", "with_rework", "deletions"];
if (inArray(klickTarget.value, possTargets)) {
	targetName = klickTarget.value;
	} else {
	targetName = "";
	}
var htmlBody = document.getElementsByTagName("body");
//var classValue = htmlBody[0].getAttribute("class");
if (targetName.length > 0) {
	htmlBody[0].setAttribute("class", targetName);
	} else {
	htmlBody[0].removeAttribute("class");
	}
}

Je nach Klassenname werden in meinem Dokument Listenelemente anhand von CSS-Regeln unmittelbar ein- bzw. ausgeblendet. Ein Neuladen oder -rendern des Dokuments ist nicht notwendig.

.without_rework .need_rework,
.without_rework .obsolete,
.with_rework .no_problem,
.with_rework .obsolete,
.deletions .no_problem,
.deletions .need_rework {
display: none;
}

Ob nun body das Attribut class mit einem bestimmten Wert zugewiesen bekommt, oder html das Attribut lang mit einem ebenso bestimmten Wert, ist egal. Die konkreten CSS-Regeln werden nach dem Wechsel des Attributwertes (un)wirksam. Die Struktur des HTML-Dokuments muss natürlich so beschaffen sein, dass die CSS-Regeln zutreffen.

Ich müsste also entweder beim Klicken auf den Link auch das Neuladen erzwingen, oder eine andere Methode zum Neurendern finden, falls es die gibt.

Wie gesagt, wenn alle beteiligten Techniken zusammenspielen, ist das nicht notwendig.

Vom Prinzip ist das mit dem Neuladen ja ok, ich hätte es nur eleganter gefunden, darauf verzichten zu können, gerade in Hinblick auf mögliche mobile Nutzer.

Dann kannst du auch nach Sprachen gleich getrennte Inhalte ausliefern. Bei einer Änderung der Sprachangabe kannst du die neuen Inhalte ohne Reload der ganzen Seite mit AJAX nachladen.

Aber als elegant scheint mein Ansatz hier ja ohnehin nicht durchzugehen :)

Nee, elegant ist anders. :-)

Tschö, Auge

--
Wir hören immer wieder, dass Regierungscomputer gehackt wurden. Ich denke, man sollte die Sicherheit seiner Daten nicht Regierungen anvertrauen.
Jan Koum, Mitgründer von WhatsApp, im Heise.de-Interview
0 49

Regel in CSS Klasse ändern

Blumentopf
  • css
  • javascript
  1. 1
    Auge
    1. 0
      Gunnar Bittersmann
  2. 0
    Matthias Apsel
    • css
    • jsp
    1. 0
      Auge
      • css
      • javascript
      1. 0
        Matthias Apsel
        1. 0
          Auge
          • sprache
    2. 0
      Matthias Apsel
      1. 0
        Gunnar Bittersmann
        • css
        1. 0
          Matthias Apsel
          1. 0
            Gunnar Bittersmann
  3. 0
    Blumentopf
    1. 0
      Auge
      • css
      • html
      • javascript
      1. 0
        Blumentopf
        1. 0
          Auge
          1. 0
            Blumentopf
            1. 0
              Matthias Apsel
            2. 0
              Auge
              1. 0
                Blumentopf
              2. 0
                Orlok
                1. 0
                  Auge
                  1. 0

                    "Funktion" im Alltag

                    Der Martin
                    • sonstiges
                    1. 0
                      Auge
                      • menschelei
                      • sonstiges
                      1. 0
                        Der Martin
                        1. 0
                          Auge
                          1. 0
                            Der Martin
                    2. 0
                      Tabellenkalk
                      1. 0
                        Der Martin
                    3. 0
                      Der Martin
                      1. 1
                        JürgenB
                        • menschelei
                        • sonstiges
                        1. 0
                          Der Martin
                          1. 0
                            JürgenB
                            1. 0
                              Der Martin
                  2. 4

                    Arraymethoden und anonyme Funktionen

                    Orlok
                    • javascript
                  3. 2

                    const let var

                    Orlok
                    • javascript
                    1. 3
                      Orlok
                    2. 0
                      Auge
                      1. 1

                        Konstanten

                        Orlok
                        • javascript
                        • php
                        1. 0
                          Auge
    2. 0
      Gunnar Bittersmann
      • css
      • internationalisierung
      • javascript
      1. 0
        Gunnar Bittersmann
      2. 0
        Blumentopf
        1. 0
          Der Martin
          1. 0
            Blumentopf
            1. 0
              Der Martin
        2. 0
          Matthias Apsel
          1. 0
            Blumentopf
            1. 0
              Matthias Apsel
        3. 0
          Gunnar Bittersmann