Felix42: XHTML-Fragmente/Knoten in ein Dokument einfügen

Beitrag lesen

Hallo,

eine Website, die ich im Moment entwickle, tauscht per XMLHttpRequest Daten mit dem Server aus. Als Transferformat verwende ich JSON, da es kompakter ist und für meine Zwecke ausreicht. Meistens werden nur wenige, kurze Informationen übertragen, z.B. ob eine bestimmte Aktion erfolgreich war oder einfache Strings.

Allerdings werden auch Forumspostings und Beschreibungstexte per JSON übertragen, die Formatierungsanweisungen in Form von (X)HTML enthalten.
Jetzt bin ich am überlegen, wie ich diese Inhalte in am besten in die Webseite einfüge.

Da innerHTML an vielen Stellen als unelegant oder "schlechter Stil" bezeichnet wird, habe ich angefangen die importNode-Methode zu verwenden (außer im IE, da es hier keinen funktionierenden Ersatz gibt).

  
var domParser = new DOMParser();  
  
function importXmlElementFromString(s)  
{  
    var xmlDoc = domParser.parseFromString(s, "text/xml");  
  
    var root = xmlDoc.documentElement;  
  
    return document.importNode(root, true);  
}

Bei dem Code habe ich jetzt der Einfachheit halber die IE-Workarounds weggelassen. Die Methode gibt zu einem gegebenen XHTML-Quelltext s das root-Element zurück. Allerdings muss s der Code eines vollständigen XML-Dokuments sein wie z.B.:

<?xml version="1.0" encoding="utf-8" ?>  
<div xmlns="http://www.w3.org/1999/xhtml">  
  <p>foo</p>  
  <p>bar</p>  
</div>

Deshalb bin ich mir nicht sicher ob diese Methode sinnvoll ist. Für jedes kleine Schnipselchen muss man schließlich ein neues Dokument erstellen, aus dem dann das root-Element in das Webseitendokument importiert und eingefügt wird.

Wenn ich innerHTML setze, wird das dann intern auch so behandelt? Der eingefügte Code muss doch auch irgendwie geparst und das resultierende Element in den vorhandenen DOM-Tree eingefügt werden.

Oder: warum kann der XML-Parser des Browsers (DOMParser) nicht direkt ein Element/Knoten zurückgeben anstatt eines ganzen Dokuments? Ist das nicht nachteilig für die Performance?

Wenn innerHTML so vorgeht, warum wird es dann an vielen Stellen so verteufelt?

Oder sehe ich das zu eng!? Irgendwie versteh ich grad die (Browser-)Welt nicht mehr-.-

Grüße
Felix