Tabelle dynamisch erzeugen in MSIE 5.0
apstrakt
- dhtml
0 Tim Ruffing0 apstrakt
0 Gerd Gruber0 Uschi Renziehausen0 apstrakt
Hallo!
Mein Problem: ich erzeuge dynamisch eine Tabelle (vgl. das Script unten) mit JavaScript. Im Mozilla 1.0 funktioniert das auch einwandfrei. Im Internet Explorer 5.0 wird die Tabelle aber nicht angezeigt. Es wird jedoch auch kein JS-Fehler gemeldet und das Objekt scheint sogar irgendwie zu existieren, da man via Script z.B. auf die Eigenschaft "info" der Tabelle zugreifen kann. Dummerweise kann man beim MSIE ja nicht vernünftig nach Fehlern in JScripts suchen. Irgendetwas mache ich also falsch oder vergesse ich. Weiß vielleicht jemand was?
[Einen Div mit Links drin habe ich übrigens mit ähnlichem Script dynamisch erzeugt. Das funktioniert im IE 5. Haben Tabellen irgendwelche kuriosen Eigenarten?]
Tschau,
apstrakt
Das Skript [Ausschnitt]:
var megalayer=document.getElementById("megalayer");
fllayer = document.createElement("table");
fllayer.id="fllayer";
fllayer.info=""+anZeilen+"x"+anSpalten;
fllayer.style.position = "absolute";
fllayer.style.top = "40px";
fllayer.style.left = "7px";
fllayer.style.margin = "0px";
fllayer.style.padding = "0px";
fllayer.style.zIndex = "3";
fllayer.style.visibility = "visible";
fllayer.style.width = breite+"px";
fllayer.style.height = hoehe+"px";
for (var zeile=0; zeile<anZeilen; zeile++) {
var aktuTR = document.createElement("tr");
fllayer.appendChild(aktuTR);
for (var spalte=0; spalte<anSpalten; spalte++) {
var aktuTD = document.createElement("td");
aktuTD.id="fl"+zeile+"x"+spalte;
aktuTD.style.backgroundColor = "red";
aktuTD.style.width = qubr+"px";
aktuTD.style.height = qubr+"px";
aktuTD.style.margin = "0px";
aktuTD.style.padding = "0px";
aktuTD.appendChild(document.createTextNode("x"));
aktuTR.appendChild(aktuTD);
}
}
megalayer.appendChild(fllayer);
Hallo!
Tach
Was ist den Info für eine Eigenschaft. Die gibts doch gar nicht. Lass das mal weg
Tim
Hallo!
Tach
Was ist den Info für eine Eigenschaft. Die gibts doch gar nicht. Lass das mal weg
Hallo Tim!
Nein, nein, natürlich gibt es diese Eigenschaft nicht von Haus aus, aber ich muß da Informationen transportieren, das funktioniert bestimmt mit dem tbody-Tip der anderen!
Tschau,
Axel
Hallo!
Mein Problem: ich erzeuge dynamisch eine Tabelle (vgl. das Script unten) mit JavaScript. Im Mozilla 1.0 funktioniert das auch einwandfrei. Im Internet Explorer 5.0 wird die Tabelle aber nicht angezeigt. Es wird jedoch auch kein JS-Fehler gemeldet und das Objekt scheint sogar irgendwie zu existieren, da man via Script z.B. auf die Eigenschaft "info" der Tabelle zugreifen kann. Dummerweise kann man beim MSIE ja nicht vernünftig nach Fehlern in JScripts suchen. Irgendetwas mache ich also falsch oder vergesse ich. Weiß vielleicht jemand was?
[Einen Div mit Links drin habe ich übrigens mit ähnlichem Script dynamisch erzeugt. Das funktioniert im IE 5. Haben Tabellen irgendwelche kuriosen Eigenarten?]
Tschau,
apstrakt
Das Skript [Ausschnitt]:
var megalayer=document.getElementById("megalayer");
fllayer = document.createElement("table");
fllayer.id="fllayer";
fllayer.info=""+anZeilen+"x"+anSpalten;
fllayer.style.position = "absolute";
fllayer.style.top = "40px";
fllayer.style.left = "7px";
fllayer.style.margin = "0px";
fllayer.style.padding = "0px";
fllayer.style.zIndex = "3";
fllayer.style.visibility = "visible";
fllayer.style.width = breite+"px";
fllayer.style.height = hoehe+"px";
for (var zeile=0; zeile<anZeilen; zeile++) {
var aktuTR = document.createElement("tr");
fllayer.appendChild(aktuTR);
for (var spalte=0; spalte<anSpalten; spalte++) {
var aktuTD = document.createElement("td");
aktuTD.id="fl"+zeile+"x"+spalte;
aktuTD.style.backgroundColor = "red";
aktuTD.style.width = qubr+"px";
aktuTD.style.height = qubr+"px";
aktuTD.style.margin = "0px";
aktuTD.style.padding = "0px";
aktuTD.appendChild(document.createTextNode("x"));
aktuTR.appendChild(aktuTD);
}
}
megalayer.appendChild(fllayer);
Hallo,
ich habe ein ähnliches Problem gehabt.
Geholften hat bei mir, dass ich dem Table ein tbody angefügt habe und darin erst die tr und td erzeugt habe.
In deinem Fall so ähnlich wie:
var flbody = document.createElement("tbody");
flbody.id="tbody1";
aktuTR.appendChild(aktuTD);
flbody.appendChild(aktuTR);
fllayer.appendChild(flbody);
ich hoffe dies funktioniert bei dir auch
mit freundlichen Grüßen
Gerd
Gugucks,
es gibt ein wohlbehütetes geheimnis. tr-elemente sind nie kinder von table, sondern immer von tbody. während dir mozilla dieses automatisch einbaut, hätte es der ie gerne von hand, und dann klappts auch mit dem nachbarn.
anbei der quälcode
<html>
<head>
<title></title>
<script language="JavaScript">
var anZeilen = "10";
var anSpalten = "3";
var breite = 300;
var hoehe = 300;
var qubr = 100;
function tabelle() {
var megalayer=document.getElementById("megalayer");
fllayer = document.createElement("table");
fllayer.id="fllayer";
fllayer.info=""+anZeilen+"x"+anSpalten;
fllayer.style.position = "absolute";
fllayer.style.top = "40px";
fllayer.style.left = "7px";
fllayer.style.margin = "0px";
fllayer.style.padding = "0px";
fllayer.style.zIndex = "3";
fllayer.style.visibility = "visible";
fllayer.style.width = breite+"px";
fllayer.style.height = hoehe+"px";
fltbody = document.createElement("tbody");
fllayer.appendChild(fltbody);
for (var zeile=0; zeile<anZeilen; zeile++) {
var aktuTR = document.createElement("tr");
fltbody.appendChild(aktuTR);
for (var spalte=0; spalte<anSpalten; spalte++) {
var aktuTD = document.createElement("td");
aktuTD.id="fl"+zeile+"x"+spalte;
aktuTD.style.backgroundColor = "red";
aktuTD.style.width = qubr+"px";
aktuTD.style.height = qubr+"px";
aktuTD.style.margin = "0px";
aktuTD.style.padding = "0px";
aktuTD.appendChild(document.createTextNode("x"));
aktuTR.appendChild(aktuTD);
}
}
megalayer.appendChild(fllayer);
}
</script>
</head>
<body>
<div id="megalayer"></div>
<div onclick="tabelle()">tabelle bauen</div>
</body>
</html>
gruß uschi
Hallo Uschi!
Vielen Dank für den Tip. Da habe ich wirklich gepennt. Bevor ich die Table mit Script zusammengebaut habe, habe ich mir extra noch im DOM-Inspector des Mozilla angeguckt, welche Struktur so eine Table hat, damit ich ja nichts falsch mache. Das hätte ich mir auch sparen können, weil ich das TBODY doch einfach übersehen habe.
Übrigens: bei der selbstgebauten Table ohne TBODY zeigt der DOM-Inspector auch kein TBODY an, d.h. der Mozilla baut das wohl doch nicht ein - obwohl er ein TBODY anzeigt, wenn man eine Table über HTML (ohne <tbody>) definiert. Finde ich schon blöd, daß keine 1-zu-1-Entsprechung zwischen HTML-Code und DHTML-Script besteht. Doch jetzt weiß ich ja bescheid.
Tschau,
Axel
Gugucks,
es gibt ein wohlbehütetes geheimnis. tr-elemente sind nie kinder von table, sondern immer von tbody. während dir mozilla dieses automatisch einbaut, hätte es der ie gerne von hand, und dann klappts auch mit dem nachbarn.
gruß uschi