Andreas Ploch: Textfarbe per Javascript ändern

Hallo zusammen,

ich bin kurz-vor-aus-dem-Fenster-springen. Folgendes - simples - Script verweigert im IE6 seinen Dienst und bringt nicht den erwünschten Effekt. Es soll lediglich die Textfarbe eines Abschnittes geändert werden.

Funktioniert auf dem Mac bei Safari / Firefox super - nur der Windows IE stellt sich  mal wieder quer. Mache ich hier etwas falsch ?

<body>
<p id="abschnitt">Das ist nur ein Beispiel Text.</p>
<script language="javascript">
document.getElementById("abschnitt").setAttribute("style", "color:#FF0000");
document.getElementById("abschnitt").replaceChild("Das ist nur ein Beispiel Text.", document.getElementById("abschnitt").firstChild);
</script>
</body>

Live-Beispiel
http://www.ploch.de/test/test.htm

Es wäre sehr nett, wenn Ihr hier mal ein Auge drauf werfen könntet.
Vielen Dank,
Andreas

  1. Hallo,

    Es soll lediglich die Textfarbe eines Abschnittes geändert werden.

    <body>
    <p id="abschnitt">Das ist nur ein Beispiel Text.</p>

    <script type="text/javascript">
    document.getElementById("abschnitt").style.color = "#FF0000";
    </script>

    </body>

    Was Du mit dem .replaceChild() erreichen wolltest, erschließt sich mir allerdings nicht.

    viele Grüße

    Axel

  2. Hallo Andreas,

    zunächst einmal hat dein Beispiel auch im FF einen Javascript Fehler. Den siehst du, wenn du die Javascript-Konsole öffnest. Die Methode replaceChild erwartet nämlich zwei Objekte vom Typ node (siehe hier)

    Leider macht der IE auch dann nicht das gewünschte, wenn man diesen Fehler beseitigt hat ;-(

    Die Zeile

    document.getElementById("abschnitt").replaceChild("Das ist nur ein Beispiel Text.", document.getElementById("abschnitt").firstChild);

    kann sogar komplett gestrichen werden und es funktioniert im FF trotzdem, im IE aber nicht.

    Es funktioniert in beiden Browsern, wenn man es folgendermaßen schreibt:

    document.getElementById("abschnitt").style.color="#FF0000";
    document.getElementById("abschnitt").setAttribute("style", "Color:#FF0000;");
    var knoten=document.createTextNode("Das ist nur ein (roter) Beispiel Text.");
    document.getElementById("abschnitt").replaceChild(knoten, document.getElementById("abschnitt").firstChild);

    (ich habe zusätzlich noch den Inhalt des Knotens geändert, um den Effekt zu verdeutlichen und zu zeigen, wie replaceChild richtig angewendet wird).

    Liebe Grüße mbr

    1. Hallo,

      Es funktioniert in beiden Browsern, wenn man es folgendermaßen schreibt:
      document.getElementById("abschnitt").style.color="#FF0000";

      Das funktioniert auch in allen Browsern, die JavaScript beherrschen.

      document.getElementById("abschnitt").setAttribute("style", "Color:#FF0000;");

      Diese Zeile ist überflüssig.

      viele Grüße

      Axel

      1. Hi,

        document.getElementById("abschnitt").style.color="#FF0000";
        Das funktioniert auch in allen Browsern, die JavaScript beherrschen.

        Keineswegs. Das funktioniert in allen Browsern die JavaScript und das W3C-DOM beherrschen.. Korrekterweise muß es lauten:

        if(document.getElementById) {
         document.getElementById("abschnitt").style.color="#FF0000";
         ...
        }

        Gruß, Cybaer

        --
        Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
        1. Hallo,

          Das funktioniert in allen Browsern die JavaScript und das W3C-DOM beherrschen.

          Keineswegs. Die Methode document.getElementById ist DOM Level 1, wogegen die Eigenschaft HTMLElement.style in DOM Level 1 noch nicht existiert, sondern erst in DOM Level 2. Korrekterweise muss es also heißen:

          if(document.getElementById) {
           if (document.getElementById("abschnitt").style) {
              document.getElementById("abschnitt").style.color = "#FF0000";
           }
          }

          viele Grüße ;-)

          Axel

          1. Hi,

            Korrekterweise muss es also heißen:

            Theoretisch ein absolut berechtigter Einwand!

            Praktisch betrifft das aber wohl nur bestimmte ältere Operas, die aber style wg. des von ihnen unterstützten IE-DOMs trotzdem beherrschen. :)

            Gruß, Cy-"Ja, ich haben den Smiley gesehen ;-)"-baer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
  3. Danke für Eure Antworten und Lösungsvorschläge - sie funktionieren so wie gewüscht !
    Ich beschäftige mich erst seit ein paar Tagen im Rahmen eines kleinen AJAX-Projektes für meine Webseite mit der DOM/Javascript-Programmierung.
    Einiges war mir noch nicht so geläufig ......

    Vielen Dank an alle Beteiligten.
    Andreas