Christian: Alternative zu innerHTML in JS/DOM

Hallo,

ich möchte den HTML Inhalt einer div-Box mit der ID "cont" auf Klick verändern. Unter IE ging das ja mit dem innerHTML Knoten der all-Hierarchie, d.h. der dynamische Text wurde vom Browser nochmals evaluiert bezüglich HTML Tags usw.

Da IE aber IE ist und imo dem Feuerfuchs die Welt gehört, ist die innerHTML Geschichte nun gegessen. Leider habe ich keine Möglichkeit gefunden, den neuen Text für die div-Box nach dem DOM System evaluieren zu lassen, d.h. es wird nur der reine Text in den Kindknoten geschrieben. Gibt es denn nach dem DOM System überhaupt eine Möglichkeit, das Verhalten von innerHTML offiziell zu simulieren bzw. habe ich da irgendwas nicht mitbekommen?

Nur den Text zu ersetzen bringt mich nicht weiter, ich muß den Inhalt der div-Box auch formattechnisch in einem Guß aufbereiten. Ich befürchte schon fast, daß das W3C hier schwer gepennt hat. Sowas Simples wie

document.getElementById("cont").firstChild.write("<b>Neu und fett</b>");

oder meinetwegen auch

document.getElementById("cont").innerHTML = "<b>Neu und fett</b>";

wäre schön gewesen (wobei letzteres im FF 1.0.4 eine JS Exception wirft).

Gibt es Hoffnung?

  1. Hallo,

    ff unterstüzt innerHTML.

    gruss

    --
    no strict;
    no warnings;
    "May I introduce you to OSX. It even runs on cheap intel hardware."
    "I doubt that. It could run on cheap intel hardware, but Apple will restrict to expensive Apple hardware, which consists of cheap Intel hardware."
  2. hi,

    Da IE aber IE ist und imo dem Feuerfuchs die Welt gehört, ist die innerHTML Geschichte nun gegessen.

    nein, im gegenteil.
    auch die geckos interpretieren inzwischen innerHTML, und zwar unterhalb des node-objektes.

    Leider habe ich keine Möglichkeit gefunden, den neuen Text für die div-Box nach dem DOM System evaluieren zu lassen, d.h. es wird nur der reine Text in den Kindknoten geschrieben. Gibt es denn nach dem DOM System überhaupt eine Möglichkeit, das Verhalten von innerHTML offiziell zu simulieren bzw. habe ich da irgendwas nicht mitbekommen?

    wenn du es wirklich ohne innerHTML machen wolltest, müsstest du wohl jedes neue element, welches du hinzufügen willst, mit createElement anlegen, einhängen, für textinhalte analog mit createTextNode, etc.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 你好 wahsaga,

      auch die geckos interpretieren inzwischen innerHTML, und zwar unterhalb
      des node-objektes.

      Naja, „inzwischen“ ist leicht untertrieben ;) Das geht bereits in Mozilla
      1.0 (bis dahin habe ich getestet), also schon recht lange.

      再见,
       克里斯蒂安

      --
      To define recursion, we must first define recursion.
      http://wwwtech.de/
      1. hi,

        Naja, „inzwischen“ ist leicht untertrieben ;)

        war mir nicht sicher, seit welcher version.

        also schon recht lange.

        im vergleich zum superbrowser aus redmond, der das schon seit über einem halben jahrzehnt behherscht ...

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
      2. Hallo Christian,

        Naja, „inzwischen“ ist leicht untertrieben ;) Das geht bereits in Mozilla
        1.0 (bis dahin habe ich getestet), also schon recht lange.

        Ich kann mich erinnern, dass das bereits in den 0.9ern geklappt hat; der entsprechende Feature-Request wurde am 22. Februar 2001 zuletzt bearbeitet (steht rechts oben), d.h. spätestens dann sollte das Feature bereits implementiert gewesen sein.

        Mozilla 0.8 wurde am 14. Februar 2001 veröffentlicht, Mozilla 0.8.1 am 26. März 2001. Damit dürfte Mozilla ab 0.8.1 das bereits unterstützt haben (ich bin allerdings zu faul, das jetzt zu testen), spätestens jedoch die 0.9, die am 7. Mai 2001 veröffentlicht wurde.

        Viele Grüße,
        Christian

  3. Hallo,

    Da IE aber IE ist und imo dem Feuerfuchs die Welt gehört, ist die innerHTML Geschichte nun gegessen.

    Funktioniert einwandfrei:

    <html>
    <head>
     <title>Untitled</title>
     <script language="JavaScript">
      function writeHTML()
       {
        document.getElementById("cont").innerHTML = "<b>Neu und fett</b>";
       }
     </script>
    </head>

    <body onload="writeHTML();">

    <div id="cont"><b>alt und fett</b></div>

    </body>
    </html>

    Grüße
    Thomas

    --
    Surftip: kennen Sie schon Pipolino's Clowntheater?
    http://www.clowntheater-pipolino.net/