NS-Alternative zu document.all.xxxx.innerHTML !?
sven
- html
0 Christoph Schnauß0 sven0 Christoph Schnauß0 sven
0 Dominik0 sven
0 Christian Seiler
Nabend,
ich möchte per JS den Text an einer best. Stelle dynamisch ändern.
Bis jetzt hab ich es so:
Im JS innerhalb des <head>:
document.all.test.innerHTML = "12345";
später im <body>
<p id="test">
</p>
Mit dem IE funktioniert das auch ganz gut, nur hab ich jetzt gelesen, dass dies wohl kein Standard ist und vom NS nicht interpretiert werden kann.
Wie kann man sowas für beide/mehrere/alle Browser lösen ?
Es dankt
Sven
morgens,
document.all.test.innerHTML = "12345";
Mit dem IE funktioniert das auch ganz gut, nur hab ich jetzt gelesen, dass dies wohl kein Standard ist und vom NS nicht interpretiert werden kann.
Das hast du richtig gelesen.
Wie kann man sowas für beide/mehrere/alle Browser lösen ?
Indem man in den Javascript-Funktionen jeweils Alternativen benennt. Man fragt ab:
if (document.all){
tu etwas IE-spezifisches
}
else {
tu etwas Vernünftiges
}
Du hast eine Kombination aus gleich zwei problematischen Anweisungen gewählt. "document.all" versteht wirklich nur der IE, und mit "innerHTML" haben außer IE tatsächlich fast alle Browser ebenfalls Probleme. Wenn es denn also Javascript sein muß, sollte so eine "Weiche" gebaut werden.
Grüße aus Berlin
Christoph S.
Danke schonmal.
Ich hab jetzt die Zeile folgendermaßen geändert:
document.getElementById("test").innerHTML = ....
und nun gehts :)
Zumindest im ie und im ns7
Andere Browser kann ich z.Z. nicht testen.
Aber es scheint ja nicht gerade sehr sauber zu sein.
Nur wie umgeht man nun dieses Problem ?
Danke
Sven
hi
document.getElementById("test").innerHTML = ....
und nun gehts :)
Schön.
Aber es scheint ja nicht gerade sehr sauber zu sein.
Stimmt. Aber wieso?
Nur wie umgeht man nun dieses Problem ?
Gar nicht. Wenn schon, dann versucht man, ein Problem zu lösen, aber nicht, es zu umgehen.
Grüße aus Berlin
Christoph S.
Nur wie umgeht man nun dieses Problem ?
Gar nicht. Wenn schon, dann versucht man, ein Problem zu lösen, aber nicht, es zu umgehen.
Wenn ich eine andere Lösung finde bin ich das Problem umgangen, das manchen browser damit Schwierigkeiten haben.
Gelöst ist es bestimmt nicht.
Aber danke für diese Korintent*****e :-/
Aber es scheint ja nicht gerade sehr sauber zu sein.
Nur wie umgeht man nun dieses Problem ?
hmm, das Problem ist doch mit: " document.getElementById("test") "
gelöst...
Ich finde das auch nicht unsauber, denn so ist der Standard.
Außerdem klappt das mit allen modernen Browsern (d.h. bis auf die steinalten Netscape 4.x und Internet Explorer 4, die aber mittlerwiele unwichtig sind)
Dominik
Hi Dominik,
das Problem war noch das innerHTML, das anscheinden kein Standard ist.
Aber auch dies ist nun gelöst (siehe andere thread-Verzweigung)
Trotzdem vielen Dank für Deine Antwort :)
cu,
Sven
Hallo sven,
document.getElementById("test").innerHTML = ....
[...]
Aber es scheint ja nicht gerade sehr sauber zu sein.
Warum sollte das nicht sauber sein? Im DOM-Standard ist das so definiert: http://www.w3.org/TR/2000/WD-DOM-Level-1-20000929/level-one-html.html#ID-36113835
Mit document.getElementById('id') bekommst Du ein Objekt einer Kindklasse von HTMLElement zurück. Dieses kannst Du dann manipulieren.
Allerdings sollte gesagt werden, dass innerHTML *kein* Standard ist. Allerdings wird innerHTML von Internet Explorer ab 5 [1], Mozilla ab 0.irgendwas, Netscape ab 6.irgendwas (6.1 auf jeden Fall, 6.0 bin ich mir nicht ganz sicher), Konqueror ab 2.2, Opera ab 7 unterstützt.
Wenn Du _ausschließlich_ Text ersetzten musst, dann kannnt Du eine andere Eigenschaft als innerHTML verwenden, die auch mit Opera 6 funktioniert:
document.getElementById('test').firstChild.nodeValue = 'blablabla';
Allerdings funktioniert diese Methode nur, wenn der Absatz auch einen Inhalt enthält, also musst Du am Anfang <p id="test"> </p> oder so schreiben. (das ist hier wichtig, da es einen Inhalt darstellt)
Viele Grüße,
Christian
[1] Der Internet Explorer 4 unterstützt innerHTML zwar auch, aber er kann kein DOM, daher schreibe ich ab 5. Wenn Du Internet Explorer 4 auch noch unterstützen willst, dann so:
if (document.getElementById) {
// DOM
} else if (document.all) {
// IE 4 methode mit document.all
} else {
// weder DOM noch IE4
}
Hi Christian,
also mit
document.getElementById('test').firstChild.nodeValue = 'blablabla';
umgehe ich _keinen Standard, d.h. dieser Code MUSS von sämtlichen neueren Browsern interpretiert werden können !?!?
Dann mach ich's nämlich so :-)
1000Dank für Deine kompetente Hilfe !!
cu,
Sven
Hallo Sven,
also mit
document.getElementById('test').firstChild.nodeValue = 'blablabla';
umgehe ich _keinen Standard, d.h. dieser Code MUSS von sämtlichen neueren Browsern interpretiert werden können !?!?
Jeder Browser, der behauptet, dass er DOM Level (nachschauen) 1 unterstützt: ja. Allerdings kannst Du mit firstChild.nodeValue keinen HTML-Code einfügen, sondern lediglich reinen Text verändern. Nicht, dass Du Dich wunderst, warum 'Hallo<b>test</b>hallo' nicht klappt.
Viele Grüße,
Christian
Hallo,
Allerdings wird innerHTML von [...] Opera ab 7 unterstützt.
allerdings haben sich die Entwickler dabei nicht an der implentierung der anderen Browser orientiert sondern ein eigenes Süpchen gekocht. Womit es also eine Opera-Variante von innerHTML nun gibt, die nicht vollständig kompatibel zu den anderen innerHTML-Versionen ist und somit wiederum oft unbrauchbar ist. (Was sich die Operaleute dabei dachten weiß der Henker....): deswegen: innerHTML einfach möglichst gar nicht nutzen..... (sonst muß man noch eine innerHTML-Dialektweiche bauen.... zumindest wenn man style-Angaben damit schreiben/lesen möchte, das macht der Opera nämlich nicht....)
Chräcker