Gerd: document.write ersetzten

Beitrag lesen

ich möchte "document.write()" ersetzten.

Wieso?

Weil es in xhtml nicht erlaubt ist (oder denke ich da völlig falsch?)

Entweder du verwendest Unobtrusive JavaScript - dann bringst du die nötigen Informationen im HTML unter, z.B. mit data-Attributen. Das JavaScript läuft dann über das DOM und nimmt die nötigen Ersetzungen vor. An welcher Stelle etwas eingefügt werden muss, wird dem Script dann aus dem Kontext klar. In diesem Fall solltest du das JavaScript streng vom HTML trennen. Also keine manuellen Aufrufe mitten im Dokument. So arbeiten viele Anti-Spam-Scripte und es ist aus JavaScript-Sicht die beste Lösung.

Verstanden habe ich hiervon, dass ich die Rohdaten in html unterbringen soll. Dann läuft ein javascirpt über den ganzen Baum und über den Ort an dem das Script Daten findet weiss es dann wo der Baum manipuliert werden soll. Das klingt gut! Und "mit den ganzen Objektbaum rekusriv durchsuchen" habe ich Erfahrung - das kriege ich hin.

Vestanden habe ich allerdings nicht, mit welchen Tags/Attributen ich die Daten in html einbinden sollte (<div data="emailadresse"> wird doch vermutlich einen Syntaxfehler hervorufen. Mir kommt die Frage wirklich ein bischen blöd vor weil das wohl der einfachere Akt ist - ich weiss wirklich nicht was du für das Dateneingeben vorschlägst.

Im Beispiel unten habe ich mir mit "id" Attributen geholfen - finde es aber nicht sehr elegant!

Unter den gegebenen Umständen ist das eine ganz gute Lösung. Es gibt natürlich bessere - mit Unobtrusive Scripting.

Ja - da werde ich nachschauen ... siehe oben.

Es gibt auch ohne document.write eine Möglichkeit, in einem script-Element an das script-Elementobjekt zu kommen, das gerade ausgeführt wird. Es ist nämlich das letzte bekannte script-Element im Dokument.

<!DOCTYPE html>

<html>
<body>
<p>bla</p>
<script>
[code lang=javascript](function () {
var scripts = document.getElementsByTagName('script');
var script = scripts[scripts.length - 1];
var text = document.createTextNode('foo');
script.parentNode.replaceChild(text, script);
})();


> </script>  
> </body>  
> </html>[/code]  
>   
> Das funktioniert, weil die Ausführung von (synchronen) script-Elementen das HTML-Parsing anhält. Allerdings ist das nicht weniger »gehackt« und ich würde es nicht so lösen.  
  
Der Code ist intressant - aber wie du schon sagst ein bischen gekackt.  
  
Danke!!! Gerd