<div>
<a href="#">X</a>
foobar
<a href="/">Y</a>
</div>
>
> Bei dieser Codemenge lohnt es sich natürlich noch nicht, aber das Prinzip sollte klar werden.
Bei größeren Codemengen schon gar nicht! Sagt mir mal jemand, warum man HTML-Code in solchen (immer umständlichen!) Strukturen unterbringen sollte, und nicht in HTML, den ich dann einfach mit innerHTML ins Dokument einfügen kann?
Anders gefragt: Wann besteht denn überhaupt die Notwendigkeit, riesige HTML-Mengen im Script zu \*erzeugen\*? Ich finde, diese Diskussion um Helferfunktionen hat sich von konkreten Problemfällen entfernt. Ich bin noch nie in die Situation gekommen, größere HTML-Mengen mit dem DOM generieren zu wollen.
HTML ist üblicherweise bereits im Dokument, ausgeblendet oder als Vorlage. In ersten Fall blende ich es ein, in anderen Fall klone ich es (ggf. mehrfach) und fülle die Vorlage mit Daten aus. Muss ich z.B. hunderte Tabellenzeilen mit JS generieren (etwa auf Basis von JSON-Daten), nehme ich sowas wie [Prototype-Templates](http://) oder klone und befülle die Zellen, indem ich sie über Selektoren anspreche. Alles kein Problem ganz ohne Low-Level- oder vereinfachtes DOM-Gefummel.
Sicher kann ich dafür auch sowas wie Prototypes DOMBuilder verwenden, das ist eher eine Stil- und Geschmacksfrage - der Aufwand bleibt ungefähr gleich, weil die zu generierende Codemenge nie signifikant groß wird!
Ist das HTML(-Gerüst) nicht im Dokument, lade ich das ganze als HTML vom Server nach und kann es mit innerHTML direkt einspeisen bzw. die XML- oder JSON-Daten auf die besagte Weise transformieren.
Die Frage ist vielmehr, welche Vorteile mir das Zusammenbauen via DOM bringt. Eigentlich wenige, nämlich nur das direkte Registrieren von Event-Handlern bei allen beteiligten Elementen. Mit innerHTML und Co. muss ich Elemente nach dem Einhängen per Selektor ansprechen und ihnen Handler verpassen.
Aber selbst das hat mir nie Aufwand oder Probleme bereitet. jQuery hat z.B. beim Klonen die Möglichkeit, auch alle Event-Handler mit zu kopieren. Wenn man die Handler dann auf den Kontext reagieren lässt bzw. gleich Event Delegation betreibt (also ein Handler bei einem übergeordneten Element alle Events verarbeiten lässt), muss man bei Unterelementen gar keine spezifischen Handler registrieren.
Mathias
--
[JavaScript-Erweiterung für das SELFHTML-Forum](http://forum.de.selfhtml.org/js/doku/)