createElement mit table im IE
sterngucker
- javascript
0 Rouven0 wahsaga0 Mathias Brodala
Hallo Forumsgemeinde!
Ich habe folgendes Javascript-Problem:
Die Anweisung document.createElement("table"); scheint im IE nicht zu funktionieren. Der Quelltext:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<script type="text/javascript">
//<![CDATA[
function tester()
{
var tabelle = document.createElement("table");
document.getElementsByTagName("body")[0].appendChild(tabelle);
var tr = document.createElement("tr");
tabelle.appendChild(tr);
var td = document.createElement("td");
var txt = document.createTextNode("Test");
td.appendChild(txt);
tr.appendChild(td);
}
//]]>
</script>
</head>
<body onload="tester()">
<p>nix</p>
</body>
</html>
Dankbar für Tipps
Michael
Hi,
das ist ein Irrtum (nehme ich an). Der IE benötigt - wie vorgeschrieben und andernorts automatisch vorgenommen - ein <thead>, <tbody> o.ä. zwischen <table> und <tr>.
Einfacher machst du dir das ganze noch mit den speziellen Tabellenfunktionenff.
MfG
Rouven
Hallo Leute,
vielen Dank für die Tipps! Jetzt funktionierts: Zum Ausprobieren auf www.sternfreunde-muenster.de unter Sternenhimmel > Deep Sky-Objekte > Deep Sky-Fenster
Einen schönen Tag noch
Michael
Hi,
das ist ein Irrtum (nehme ich an). Der IE benötigt - wie vorgeschrieben und andernorts automatisch vorgenommen - ein <thead>, <tbody> o.ä. zwischen <table> und <tr>.
Einfacher machst du dir das ganze noch mit den speziellen Tabellenfunktionenff.MfG
Rouven
hi,
Die Anweisung document.createElement("table"); scheint im IE nicht zu funktionieren.
Der IE möchte, wie zu diesem Thema übrigens schon mehrfach im Archiv nachlesbar, explizit einen TBODY erzeugt bekommen, in den die Tabellenzeilen dann eingehängt werden.
gruß,
wahsaga
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