Netscape: dynamischer Text in Tabellenzelle
Horst Reinelt
- dhtml
0 Kess0 Thomas Hieck0 Kess
Hallo SelfHTMLler,
ich möchte innerhalb mehreren Zellen einer statischen Tabelle mit Hilfe von JavaScript einen Textinhalt dynamisch austauschen. Beim MS-IE funktioniert es mit
--------------------
document.all.DivIE.innerHTML = "Dynamischer Textinhalt";
--------------------
problemlos.
Bei Netscape habe ich mit
--------------------
document.LayerNS.document.open();
document.LayerNS.document.write("Dynamischer Textinhalt");
document.LayerNS.document.close();
--------------------
nur dann Erfolg, wenn ich ohne Tabellenkonstrukt außen herum arbeite.
Mit dem ILayer baut sich der Layer zwar in die Tabellenzelle, auch der ggf. statische Inhalt des Layers wird beim Anstoßen des JavaScript-Codes gelöscht. Aber der dynamische Textinhalt will einfach nicht erscheinen. :-(
Gibt es andere Möglichkeiten mit dem ILayer? Oder grundsätzlich andere Lösungen?
Danke all denen, die mir in dieser Frage weiterhelfen können.
Ciao
Horst
PS:
Ich habe im Forumsarchiv zwar schon einige Beiträge zu diesem Thema gefunden - z.B. <a href="http://www.teamone.de/selfhtml/sfarchiv/1999_2/t03554.htm#a17256>(HTML) / (DHTML) Layer in Tabellenzellen (oder wo liegt das Problem?)</a>, aber geklappt hat's trotzdem noch nicht.
Hallo Horst
Der Netscape scheint einen Fehler bei document.write() zu haben. Er wertet diese Befehle nur während des Ladens der Seite aus. Später wird zwar der Layer zurückgesetzt, der neue Inhalt erscheint aber nicht mehr. Irgendwo im Archiv schlummert dazu auch ein Thread.
Ich habe mit so beholfen, daß ich während des Seitenaufbaus alle möglichen Inhalte in separarte Layer schreibe und diese bei Bedarf einblende. Wo dies nicht geht, greife ich auf Frames zurück. Das ist layoutmäßig leider nicht immer einfach, aber es funktioniert wenigstens.
Gruß
Kess
Der Netscape scheint einen Fehler bei document.write() zu haben. Er wertet diese Befehle nur während des Ladens der Seite aus. Später wird zwar der Layer zurückgesetzt, der neue Inhalt erscheint aber nicht mehr. Irgendwo im Archiv schlummert dazu auch ein Thread.
Hmmm, das hab ich ja noch nie gehoert und halte ich ehrlich gesagt auch fuer ein Geruecht. Selbstverstaendlich kann man document.write auch noch nach Laden der Seite verwenden und es funktioniert. Wichtig dabei ist halt das Oeffnen vorher und das Schliessen danach.
Zum Problem: Ein Layer wird in Netscape wie ein eigenes Dokument behandelt. Die Idee bei Netscape ist naemlich nicht saemtlich Style-Angaben zu aendern, wie Microsoft, sondern wirklich mit Layern zu arbeiten wie in einem Grafikprogramm. Das heisst fertige Layer verschieben, anzeigen oder verbergen - die Sichtweise auf das Dokument aendern und nicht das Dokument selbst. Das heisst natuerlich, dass ein Layer nicht beliebig in andere HTML Elemente verschachtelt werden kann, sonsdern eigentlich nur als Kind von <body> oder einem anderen Layer auftreten sollte.
Deswegen ist es auch muessig beide Browser dahingehend zu vergleichen - das Konzept ist zu verschieden.
Viele liebe Gruesse, Thomas Hieck
Hallo Thomas,
Hmmm, das hab ich ja noch nie gehoert und halte ich ehrlich gesagt auch fuer ein Geruecht. Selbstverstaendlich kann man document.write auch noch nach Laden der Seite verwenden und es funktioniert. Wichtig dabei ist halt das Oeffnen vorher und das Schliessen danach.
:-)) Noe. Netsi ist da eigen. Im Zusammenhang mit Divs - die ja wie Layer behandelt werden - und Tabellen tut er es nicht. Ich gebe zu, es klingt abstrus. Aber ich hatte das mit der Version 4.6 und kann das gerne reproduzieren. Es hat mich mehrere Tage gekostet. :-(
Es gibt aber nichts, was nicht schon mal dagewesen wäre. Drum habe ich meine angeborene Faulheit auch mal ueberwunden und den entsprechenden Thread im Archiv gesucht.
Unter <../../sfarchiv/1999_2/t03554.htm#a17085> steht es.
Das ganze ist ein wenig lang, deshalb hier die entsprechende Passage:
<cite>
Ich habe tatsaechlich mal die gesamte Tabelle in eine DIV ausgegeben. Das ging solange gut, wie ich diese absolut positioniert habe. Habe ich aber position:relative verwendet, hat Netsi nichts darin erscheinen lassen, obwohl keine JS-Errors auftraten (Ja ich weiss, dass ich erst javascript: in die location bar eintippen muss). Also habe ich mal von Anfang an etwas in die DIV geschrieben, und das document.write() mit einem alert() blockiert (siehe folgenden Quelltext). Ergebnis: Der urspruengliche Inhalt wurde dargestellt, die alert()-Box sprang auf, und sobald ich OK gedrueckt habe, war der Inhalt der DIV weg. Ich meine WEG, der neue Inhalt ist nicht erschienen, nur eine leere Flaeche ist zurueckgeblieben. (Der generierte Output war uebrigens korrekt, wie sich feststellen liess, nachdem ich ihn mal von Anfang an, also im Quelltext, in die DIV eingefuegt habe.)
</cite>
Die Passge bzgl. 'document.write() wird nur beim Laden ausgewertet' finde ich jetzt natürlich nicht. <grummel> Ist aber auch nicht so wichtig. Das Verhalten ist im Zitat treffend beschrieben.
'Wird nicht ausgewerdet' ist eigentlich auch nicht korrekt. Richtig müßte es heißen, das document wird zurueckgesetzt, aber nicht mehr beschrieben.
Zum Problem: Ein Layer wird in Netscape wie ein eigenes Dokument behandelt. Die Idee bei Netscape ist naemlich nicht saemtlich Style-Angaben zu aendern, wie Microsoft, sondern wirklich mit Layern zu arbeiten wie in einem Grafikprogramm. Das heisst fertige Layer verschieben, anzeigen oder verbergen - die Sichtweise auf das Dokument aendern und nicht das Dokument selbst. Das heisst natuerlich, dass ein Layer nicht beliebig in andere HTML Elemente verschachtelt werden kann, sonsdern eigentlich nur als Kind von <body> oder einem anderen Layer auftreten sollte.
Jepp, das ist meiner bescheiden Meinung nach auch der veruenftigere Ansatz. Aber das sollte ich vielleicht nicht sagen, sonst geht hier wieder der Browserwar los.
Deswegen ist es auch muessig beide Browser dahingehend zu vergleichen - das Konzept ist zu verschieden.
<g> Aber leben müssen wir damit ... <g>
Viele Gruesse
Kess
Hi Kess
:-)) Noe. Netsi ist da eigen. Im Zusammenhang mit Divs - die ja wie Layer behandelt werden - und Tabellen tut er es nicht. Ich gebe zu, es klingt abstrus. Aber ich hatte das mit der Version 4.6 und kann das gerne reproduzieren. Es hat mich mehrere Tage gekostet. :-(
Naja, vielleicht muss ich zugeben, dass ich eigentlich immer absolut positioniere, wenn ich schon Layer verwenden. Und dabei gibt es wirklich keine Probleme einen Layer neu zu schreiben. Dann weiss ich auch nicht, wozu eine Tabelle noch gut sein soll, wenn man nicht wirklich eine braucht.
Jepp, das ist meiner bescheiden Meinung nach auch der veruenftigere Ansatz. Aber das sollte ich vielleicht nicht sagen, sonst geht hier wieder der Browserwar los.
Es war ein neuer Ansatz fuer mehr Dynamik. Wenn man sich brav im Rahmen des Ansatzes bewegt hat man nie Probleme mit Netscape :-) Ich persoenlich mag den Ansatz auch mehr, da wirklich eine gute nachvollziehbare Idee dahintersteckt mit sehr sich gut arbeiten laesst.
Viele Gruesse, Thomas Hieck