DOM & Internet Explorer
Markus**
- javascript
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**
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
Vielen Dank! Jetzt hab ich nen neuen Hut! ;)
Gruß, Markus
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
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!
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
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
Noch ein Linkversuch:
<http://de.selfhtml.org/html/tabellen/aufbau.htm#definieren@title=Tabellen definieren>
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
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
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