Markus**: DOM & Internet Explorer

Das folgende Script manipuliert einen Teil der Tabelle in einer Webseite:

  
var sel = document.createElement("td");  
sel.appendChild(document.getElementsByName("time")[0].cloneNode(true));  
//node kopieren und ins erzeugte TD-Element packen  
  
var tr = document.createElement("tr");  
tr.setAttribute("name", "via"+f);  
//TR-Element erzeugen  
  
var inp = document.createElement("input");  
inp.setAttribute("type", "text");  
inp.setAttribute("name", "inputfield");  
inp.setAttribute("style", "width:150px;");  
inp.setAttribute("id", "testid");  
//INPUT-Elment erzeugen  
  
var td1 = document.createElement("td");  
var Text = document.createTextNode("Hallo");  
td1.appendChild(Text.cloneNode(true));  
td1.appendChild(inp);  
//TD-Element erzeugen und INPUT-Element reinstekcen  
  
tr.appendChild(td1.cloneNode(false));  
tr.appendChild(td1.cloneNode(false));  
//zwei leere TD-Nodes ins TR-Element einfügen  
tr.appendChild(sel);  
//das kopierte SELECT-Element samt TD einfügen  
tr.appendChild(td1);  
//TD und Textnode einfügen  
  
document.getElementById("tb").insertBefore(tr, document.getElementById("total"));  
//alles samt als neues Table Row Element in die Tabelle integrieren  

Es klappt auch prima, allerdings wenn ich dann mittels:

document.getElementsByName("inputfield")[0].style..... versuche am grade erzeugten Objekt irgendwelche style Eigenschaften zu ändern, terminiert der MSIE mit der Begründung document.getElementsByName("inputfield")[0].style ist NULL oder kein Objekt. Komisch? ER hat es doch grade selbst erzeugt und sogar dargestellt. Offensichtlich werden vom MSIE einige Attribute ohnehin nicht beachtet. "inp.setAttribute("style", "width:150px;")" bleibt ohne Wirkung und Attribute wie "id" oder "value" lassen sich offensichtlich mit dieser Methode setzen.

Alle anderen Browser die ich bis jetzt probiert hab, haben das script auch ohne die eigenarten des MSIE ausgeführt. Was ist das für ein BUG? Kennt jemand das Phänomen?

Gruß, Markus**

  1. Hi,

    document.getElementsByName("inputfield")[0].style..... versuche am grade erzeugten Objekt irgendwelche style Eigenschaften zu ändern, terminiert der MSIE mit der Begründung document.getElementsByName("inputfield")[0].style ist NULL oder kein Objekt. Komisch? ER hat es doch grade selbst erzeugt und sogar dargestellt.

    Dargestellt schon - aber das er ihm auch den beabsichtigten Namen gegeben hätte, wünschst du dir vermutlich nur.
    Siehe auch https://forum.selfhtml.org/?t=188394&m=1253926

    Offensichtlich werden vom MSIE einige Attribute ohnehin nicht beachtet. "inp.setAttribute("style", "width:150px;")" bleibt ohne Wirkung und Attribute wie "id" oder "value" lassen sich offensichtlich mit dieser Methode setzen.

    Dass man setAttribute im IE vermeiden sollte, ist ein uralter Hut.
    elementReferenz.eigenschaft = "wert"; //bzw.
    elementReferenz.style.eigenschaftsName = "wert'; //bei Style-Eigenschaften
    tut's eigentlich so gut wie immer genauso gut, bzw. wie man merkt, besser.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Vielen Dank! Jetzt hab ich nen neuen Hut! ;)

      Gruß, Markus

  2. Hi,

    Ergänzung zu Chris:

    document.getElementById("tb").insertBefore(tr, document.getElementById("total"));
    //alles samt als neues Table Row Element in die Tabelle integrieren

    ist tb tatsächlich das table-Element?
    Dann wäre das falsch, denn tr-Elemente hängen in thead, tfoot oder tbody, aber nicht direkt in table.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    1. Hi Andreas!

      ist tb tatsächlich das table-Element?
      Dann wäre das falsch, denn tr-Elemente hängen in thead, tfoot oder tbody, aber nicht direkt in table.

      Ja, tb ist ein tbody-Element. War mir garnicht so bewußt, dass die Abkürzung auch anders gedeutet werden könnte!

      Gruß, Markus!

      1. Hi,

        ist tb tatsächlich das table-Element?
        Dann wäre das falsch, denn tr-Elemente hängen in thead, tfoot oder tbody, aber nicht direkt in table.
        Ja, tb ist ein tbody-Element. War mir garnicht so bewußt, dass die Abkürzung auch anders gedeutet werden könnte!

        //alles samt als neues Table Row Element in die Tabelle integrieren

        ließ mich das vermuten ...

        Aber wenn's tbody ist, paßt das ja.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    2. Hallo Andreas,

      Dann wäre das falsch, denn tr-Elemente hängen in thead, tfoot oder tbody, aber nicht direkt in table.

      <http://de.selfhtml.org/html/tabellen/aufbau.htm#definieren@title=
      Wie bitte>? Was ist jetzt richtig?

      Grüße, Matze

      1. Noch ein Linkversuch:

        <http://de.selfhtml.org/html/tabellen/aufbau.htm#definieren@title=Tabellen definieren>

        1. Hallo Matze,

          im HTML wird das fehlende tbody-Element automatisch eingefügt, man darf es also weglassen. Wird die Tabelle dagegen mit DOM-Methoden (createElement, appendChild) erzeugt, muss das tbody vorhanden sein

          Gruß, Jürgen

          1. Hallo Jürgen,

            im HTML wird das fehlende tbody-Element automatisch eingefügt, man darf es also weglassen. Wird die Tabelle dagegen mit DOM-Methoden (createElement, appendChild) erzeugt, muss das tbody vorhanden sein

            Danke für die Erklärung! Das wusste ich noch nicht.

            Grüße, Matze

      2. Hi,

        Dann wäre das falsch, denn tr-Elemente hängen in thead, tfoot oder tbody, aber nicht direkt in table.
        <http://de.selfhtml.org/html/tabellen/aufbau.htm#definieren@title=
        Wie bitte>?

        Ja und? Nur weil die tags von tbody optional sind, ist es das Element noch lange nicht ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.