innerHTML
Jogi
- javascript
Hallo,
wegen eines Problems in einem komplexeren Script habe ich für diesen Zweck den folgenden Code geschrieben. Es tritt dasselbe Problem auf (bitte nicht über die Unsauberkeit des Codes aufregen - ist wie gesagt nur zu Testzwecken):
<script>
function jo()
{
document.getElementById("lala").innerHTML = "<td>Subba!</td><td>Jupp!</td>";
}
</script>
<table>
<tr id="lala"><td>Halleluja</td><td>Tralalala</td></tr>
</table>
<a href="javascript:jo();">Make It!</a>
Das Problem: Firefox ändert den Tabelleninhalt nach dem Klick auf den Link. Der Internet Explorer liefert einen "Unbekannten Laufzeitfehler" (Danke Microsoft für diese treffende Beschreibung!)
Woran liegt das?! Danke im Voraus.
Hallo Jogi!
Woran liegt das?!
Das liegt daran, dass der IE an dieser Stelle einen BUG hat (selbes Beispiel mit div und p tags funktioniert...)
Lösungsvorschlag: gehe über die DOM Notation (funktioniert dann auch in Netscape!) :
http://de.selfhtml.org/javascript/objekte/document.htm
http://de.selfhtml.org/javascript/objekte/node.htm
liefern dir alles, was du brauchst.
Greets,
Richard
Hallo Jogi!
http://de.selfhtml.org/javascript/objekte/document.htm
http://de.selfhtml.org/javascript/objekte/node.htmliefern dir alles, was du brauchst.
Vielen Dank ;-)
Ich hasse Microsoft immer mehr...
Hi,
Ich hasse Microsoft immer mehr...
1. innerHTML ist eine Erfindung von MS!
2. Wie innerHTML funktioniert ist folglich auch von MS definiert!
3. Wenn *Du* gegen diese Definition verstößt, ist das nicht das Problem von MS!
=:-)
Gruß, Cybaer
Hallo Cybaer.
- Wie innerHTML funktioniert ist folglich auch von MS definiert!
Wo wir gerade dabei sind gestatte ich mir eine kleine Frage: gibt es eine Möglichkeit, eine innerHTML–ähnliche Ausgabe des Inhaltes eines Elementknotens ohne Browserinterpretationen zu erhalten?
Beispiel:
<body>
<p>Foo <a href="http://example.org">Bar</a> Baz</p>
</body>
Ausgabe von document.body.innerHTML im Opera, IE und Konqueror (Firefox ist brav):
<P>Foo <A href="http://example.org">Bar</A> Baz</P>
Will ich diesen String nun im X(HT)ML–Umfeld weiterverarbeiten, muss ich ihn zwangsläufig korrigieren. Kann ich mir dies irgendwie ersparen?
Einen schönen Donnerstag noch.
Gruß, Mathias
Hallo,
Will ich diesen String nun im X(HT)ML–Umfeld weiterverarbeiten, muss ich ihn zwangsläufig korrigieren. Kann ich mir dies irgendwie ersparen?
Nicht wirklich. Tagnamen sind im HTML-DOM großgeschrieben. Du kannst dir höchstens eine eigene Serialisierungsfunktion schreiben.
Im Opera kannst du einen ordentlichen XMLSerializer nutzen. Im Gecko und Konqueror führt der aber auch zu groß geschriebenen Tagnamen.
http://www.faqts.com/knowledge_base/view.phtml/aid/34646
http://developer.mozilla.org/en/docs/XMLSerializer
Für den IE habe ich keine Idee. Eine eigene Serialisierungsfunktion, die rekursiv den DOM-Baum durchläuft, wird also letztlich das beste sein. Vgl. http://molily.de/javascript-nodelist.
Mathias
Hallo molily.
Im Opera kannst du einen ordentlichen XMLSerializer nutzen.
Ich glaube, dass mir fortan Operas Changelogs aufmerksamer durchlesen sollte.
Für den IE habe ich keine Idee. Eine eigene Serialisierungsfunktion, die rekursiv den DOM-Baum durchläuft, wird also letztlich das beste sein. Vgl. http://molily.de/javascript-nodelist.
XMLSerializer würde mir zwar weitaus besser gefallen, aber im Zweifelsfalle werde ich wohl auf eine solche Funktion zurückgreifen müssen.
Danke für alle Verweise, ich werde mir die Rosinen herauspicken.
Einen schönen Donnerstag noch.
Gruß, Mathias
Hi,
Wo wir gerade dabei sind gestatte ich mir eine kleine Frage: gibt es eine Möglichkeit, eine innerHTML–ähnliche Ausgabe des Inhaltes eines Elementknotens ohne Browserinterpretationen zu erhalten?
IMHO nein.
Bei internen Stylesheets (STYLE-Element) ist innerHTML sogar noch das Beste, was Du beim IE kriegen kannst. Wenn Du stattdessen seine interne DOM-Liste anschaust, kriegst Du vollends die Krise ... =;-)
Gruß, Cybaer
Hallo Cybaer.
Bei internen Stylesheets (STYLE-Element) ist innerHTML sogar noch das Beste, was Du beim IE kriegen kannst. Wenn Du stattdessen seine interne DOM-Liste anschaust, kriegst Du vollends die Krise ... =;-)
Danke für die Warnung, ich werde vermeiden, mir das anzutun.
Einen schönen Donnerstag noch.
Gruß, Mathias
Hi,
Danke für die Warnung, ich werde vermeiden, mir das anzutun.
Och, ist ganz witzig, sich das mal anzutun. Man versteht auch, wie der IE die Styles intern behandelt (z.B. aufteilen von "border" in seine einzelnen Komponenten wie "border-left-width").
Gruß, Cybaer
Hallo ritschmanhard.
Das liegt daran, dass der IE an dieser Stelle einen BUG hat (selbes Beispiel mit div und p tags funktioniert...)
Ob Bug oder Feature ist fraglich. Siehe den Eintrag zu innerHTML in der MSDN:
The property [innerHTML] is read/write for all objects except the following, for which it is read-only: COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR.
Einen schönen Donnerstag noch.
Gruß, Mathias
Lieber Jogi,
(bitte nicht über die Unsauberkeit des Codes aufregen - ist wie gesagt nur zu Testzwecken):
genau hier liegt aber der Hund im Pfeffer begraben (oder so ähnlich)!
document.getElementById("lala").innerHTML = "<td>Subba!</td><td>Jupp!</td>";
Die Zeichenfolge von "</" innerhalb Deines Script-Bereiches vermute ich als Fehlerquelle. Ich schreibe obige Zeile einmal um. Es könnte Dein Problem lösen. Bitte schreibe, ob dies der Fall ist!
document.getElementById("lala").innerHTML = "<td>Subba!<" + "/td><td>Jupp!<" + "/td>";
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Lieber Jogi,
Die Zeichenfolge von "</" innerhalb Deines Script-Bereiches vermute ich als Fehlerquelle. Ich schreibe obige Zeile einmal um. Es könnte Dein Problem lösen. Bitte schreibe, ob dies der Fall ist!
document.getElementById("lala").innerHTML = "<td>Subba!<" + "/td><td>Jupp!<" + "/td>";
Liebe Grüße aus Ellwangen,
Felix Riesterer.
Hallo Felix,
leider hat dies das Problem nicht gelöst. ritschmanhard hat ja bereits geschrieben, dass der IE hier bugbehaftet ist. Ich danke dir aber trotzdem für die freundliche Mühe.
wegen eines Problems in einem komplexeren Script habe ich für diesen Zweck den folgenden Code geschrieben. Es tritt dasselbe Problem auf (bitte nicht über die Unsauberkeit des Codes aufregen - ist wie gesagt nur zu Testzwecken):
<script>
function jo()
{
document.getElementById("lala").innerHTML = "<td>Subba!</td><td>Jupp!</td>";
}
</script>
<table>
<tr id="lala"><td>Halleluja</td><td>Tralalala</td></tr>
</table>
<a href="javascript:jo();">Make It!</a>
Sowas würde ich nicht machen, du pfuscht hier dem Browser massiv ins Handwerk, indem du davon ausgehst, dass hier mittles innerHTML Objekte austauschen kannst.
Du musst dir im klaren sein, dass dein String mindestens in 6 Objekte umgewandelt werden muss und deine innerHTML Zuweisung bedeutet, dass der Browser schauen muss was du mit dieser Zuweisung austuaschen willst.
Welchen code willst du überschrieben? (Lass dir mal innerHTML vor dem überschreiben ausgeben, evtl. steht da was ganz anderes als du erwartest)
Welche Knoten müssen dafür entfernt werden und wo muss ich die neuen einfügen.
D.h. sehr komplexe Aufgaben. Da du hier weder etwas erweitern , noch etwas löschen willst, würde ich einfch die Textknoten innerhalb der TD Elemente austauschen.
Struppi.