molily: document.write ersetzten

Beitrag lesen

Hallo,

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

Wieso?

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.

Oder du rufst die Funktion weiter manuell auf. Dann ist document.write das Mittel der Wahl. Wieso willst du es ersetzen?

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.

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.

Mathias