Karl: innerHTML Problem IE

Hallo,

ich versuche eine Seite dynamisch zu verändern.

Ich habe ein div-Element, welches Text bekommen soll.
Gebe ich den Inhalt des div-Elements aus, so habe ich keine Probleme.

Wenn ich aber das div Element setzen möchte bekomme ich im IE einen Laufzeitfehler.

Hier der Code:

alert(document.getElementById(idDiv).innerHTML);
document.getElementById(idDiv).innerHTML = "Test";

Danke für euere Hilfe
Karl

  1. Hallo Karl,

    das verstehe ich nicht. Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat. Poste mal mehr Code oder einen Link.

    Gruß, Jürgen

    1. Hallo Karl,

      das verstehe ich nicht. Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat. Poste mal mehr Code oder einen Link.

      Einen Link posten geht nicht, da es bei zur Zeit lokal läuft.

      Mehr Code kann ich nicht posten, denn dieser sagt alles aus.
      Hier der ursprüngliche Code:

      function elem(id)
      {  return document.getElementById(id); }

      var packageTable = top.elem('Package');

      newPackage = "text Text Ttex";
      alert(packageTable.innerHTML+newPackage);
      packageTable.innerHTML = packageTable.innerHTML+newPackage;
      alert('Test');

      Das alert kommt nicht mehr und vorher wirft mir der IE eine Fehler.

      Gruß
      Karl

      1. Hallo Karl,

        das verstehe ich nicht. Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat. Poste mal mehr Code oder einen Link.

        Einen Link posten geht nicht, da es bei zur Zeit lokal läuft.

        Mehr Code kann ich nicht posten, denn dieser sagt alles aus.
        Hier der ursprüngliche Code:

        function elem(id)
        {  return document.getElementById(id); }

        var packageTable = top.elem('Package');

        newPackage = "text Text Ttex";
        alert(packageTable.innerHTML+newPackage);
        packageTable.innerHTML = packageTable.innerHTML+newPackage;
        alert('Test');

        Das alert kommt nicht mehr und vorher wirft mir der IE eine Fehler.

        Hi Karl,

        kann es sein, dass du eine Tabelle damit ansprichst. Die sind nämlich nur-lesend!

        Grüße
        Andi

        1. Hi Karl,

          kann es sein, dass du eine Tabelle damit ansprichst. Die sind nämlich nur-lesend!

          Hi Andi,

          genau! Das wars. Der IE bringt mich langsam zur Verzweiflung.

          Danke ung Gruß
          Karl

        2. Hallo Andi,

          kann es sein, dass du eine Tabelle damit ansprichst. Die sind nämlich nur-lesend!

          Quatsch! Das gilt nur für den MAC-IE! In http://www.j-berkemeier.de/TableSort.html werden Tabellenfelder mit innerHTML gelesen und beschrieben.

          Gruß, Jürgen

          1. Hallo JürgenB,

            Quatsch! Das gilt nur für den MAC-IE! In http://www.j-berkemeier.de/TableSort.html werden Tabellenfelder mit innerHTML gelesen und beschrieben.

            Also ich kann das Problem durchaus nachvollziehen; während es ohne weiteres möglich ist, das innerHTML einzelner Zellen zu ändern, scheint es im IE6 und Mozilla 1.7.2 (unter Win98) unmöglich zu sein TABLE, TBODY, TR in dieser Eigenschaft zu verändern. Mit Opera 7.54 geht es hingegen, aber auch nur unter Verwendung des All-Objekts:

              
            <!doctype html public "-//W3C//DTD HTML 4.0 //EN">  
            <html>  
            <head>  
            <title>Mit innerHTML Tabelle ändern</title>  
            <script type="text/javascript" language="JavaScript">  
            [code lang=javascript]  
            function textAendern () {  
              document.getElementByID('cambio').innerHTML='<tbody><tr><td>Hier steht jetzt ein anderer Text in nur einer Zelle</td></tr></tbody>';  
            }  
            
            

            </script>
            </head>
            <body >
            <table id="cambio" border="1">
            <tbody>
            <tr>
            <td>Hier steht ein Text</td>
            <td>Dieser<a href="#" onclick="textAendern()">&Auml;ndern-Link</a> steht in einer zweiten Zelle</td>
            </tr>
            </tbody>
            </table>
            </body>
            </html>
            [/code]
            Gruß Gernot

            1. Hallo Gernot Back,

              document.getElementByID('cambio').innerHTML='<tbody><tr><td>Hier steht jetzt ein anderer Text in nur einer Zelle</td></tr></tbody>';

              ok. Meine Aussage bezog sich nur auf das Ändern von Feldinhalten, also von TDs. Für ganze Tabellenstrukturen verwende ich createElement und appendChild. Der IE scheint also Probleme damit zu haben, per innerHTML den DOM-Baum in Tabellen zu verändern.

              Gruß, Jürgen

      2. Hallo,

        var packageTable = top.elem('Package');

        gibt es denn im Top Frame die function elem?

        gruss

        --
        no strict;
        no warnings;
        Der natürliche Feind der Festplatte ist der Teppich, der sich gerne mal elektrisch aufläd und der Festplatte eine wischt.
        Kluge Leute sind auch nur Menschen.
      3. Hallo Karl,

        Was macht die Funktion elem?
        Wie sieht der HTML-Teil aus?
        Welchen IE unter welchem System benutzt Du?

        Gruß, Jürgen

    2. Hi,

      das verstehe ich nicht. Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat.

      BTW: Mein Ticker funktioniert übrigens auch auf dem Mac-IE. Und da er nur über die Nodes geht, wenn innerHTML gar nicht existiert/funktioniert, bleibt nur die Schlußfolgerung, daß innerHTML sehr wohl auch mit dem Mac-IE schreibend funktioniert.

      Allerdings besteht der Tickertext ja nicht aus Code, sondern nur aus Text. Vielleicht hat er ja nur beim Schreiben von Code Probleme. Zumindest aber dein Workaround-Hinweis für reinen Text ist also auf jeden Fall unnötig.

      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 Cybaer,

        die Probleme mit innerHTML bei den MAC-IEs habe ich bisher auch nur bei Tabellenfeldern (td) bemerkt.

        Gruß, Jürgen

    3. Hi,

      Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat.

      Aber nur dann, wenn er komplette Tabellen in Divs schreiben soll.

      Gruesse, Joachim

      --
      Am Ende wird alles gut.
      1. Hallo Joachim,

        Außer den MAC-IEs kenne ich keinen DOM-fähigen Browser, der mit innerHTML Probleme hat.
        Aber nur dann, wenn er komplette Tabellen in Divs schreiben soll.

        Nein. Ich verändere in meinem Tabellensortierer die Feldinhalte mittels innerHTML. Das geht meines Wissens nach in allen DOM-fähigen Browsern. Nur der MAC-IE stürtzt ab.

        Gruß, Jürgen

        1. Hi Jürgen,

          Nur der MAC-IE stürtzt ab.

          was zunaechst mal nicht heisst, dass er es nicht kann. Aber ich gebe Dir Recht, bei _komplexeren_ Schreibereien neigen manche Versionen (afaik 5.1, 5.0 kam besser zurecht) zu Abstuerzen.

          Dennoch _kann_ er es, ich erinnere mich, dass ich einige innerHTML Geschichten unter OS-Classic gemacht habe.

          Gruesse, Joachim

          --
          Am Ende wird alles gut.
          1. Hallo Joachim,

            offensichtlich gibt es Fälle, wo innerHTML auch beim MAC-IE funktioniert. Siehe Posting von Cybaer https://forum.selfhtml.org/?t=105492&m=652345. Das unangenehme ist nur, dass der MAC-IE vorgibt, innerHTML zu können und einen so in die Falle tappen lässt.

            Gruß, Jürgen

            1. Hi Jürgen,

              Das unangenehme ist nur, dass der MAC-IE vorgibt, innerHTML zu können und einen so in die Falle tappen lässt.

              naja, ich mache eigentlich das meiste mit Dom... der Rest ist Test ;-)

              Gruesse, Joachim

              --
              Am Ende wird alles gut.
  2. Hallo Karl,

    Ich habe ein div-Element, welches Text bekommen soll.
    Gebe ich den Inhalt des div-Elements aus, so habe ich keine Probleme.

    Da es sich bei innerHTML ja ursprünglich um eine Eigenschaft des document.all-Objekts handelt, die andere Browser für document.getElementByID() übernommen haben, könnte ich mir vorstellen, dass es im IE günstiger ist, das ganze gleich über "all" anzusprechen, da getElementByID dort vermutlich ohnehin intern erst einmal wieder in all verwandelt werden muss.

    alert(document.getElementById(idDiv).innerHTML);
    document.getElementById(idDiv).innerHTML = "Test";

    Gruß Gernot