Mathias Brodala: createElement mit table im IE

Beitrag lesen

Hallo sterngucker.

Die Anweisung document.createElement("table"); scheint im IE nicht zu funktionieren.

Dein Debugging ist noch etwas ungenau, denn das Erstellen des table-Elementes funktioniert problemlos. Der Fehler liegt an einer anderen Stelle.

var tabelle = document.createElement("table");

document.getElementsByTagName("body")[0].appendChild(tabelle);
var tr = document.createElement("tr");
tabelle.appendChild(tr);

  
Hier liegt der Fehler. Der IE ist bei Tabellen äußerst pingelig und erwartet vor dem Einfügen von Tabellenzeilen, dass zuerst ein <http://de.selfhtml.org/html/tabellen/aufbau.htm#kopf_koerper_fuss@title=tbody>-Element in die Tabelle eingefügt wurde.  
  

> ~~~javascript

var td = document.createElement("td");  

> var txt = document.createTextNode("Test");  
> td.appendChild(txt);  
> tr.appendChild(td);

Dein Code ließe sich im Übrigen vereinfachen:

function tester() {  
  
  var tabelle = document.createElement('table');  
  document.[link:http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/html.html#ID-26809268@title=body].appendChild(tabelle);  
  
  var tr = tabelle.insertRow(0);  
  var td = tr.insertCell(0);  
  td.appendChild(document.createTextNode('Test'));  
  
}

Wie du siehst, nutze ich hier die vordefinierten Methoden insertRow und insertCell. Abgesehen davon, dass sie dir viel Arbeit abnehmen können, ersparen sie dir dir auch das Gehampel mit dem tbody-Element, da insertRow dieses implizit einfügt.

Einen schönen Montag noch.

Gruß, Mathias

--
sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
debian/rules