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

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

  1. Hallo!

    Da innerHTML an vielen Stellen als unelegant oder "schlechter Stil" bezeichnet wird, ...

    innerHTML finde ich gar nicht so schlimm, solange das, was Du dorthin schreibst, vorher auf Validität geprüft wurde. Kannst Du mir sagen, wo Du dieses Gerücht her hast? Ich finde bspw. eval wesentlich schlimmer als innerHTML.

    Gruß, LX

    --
    X-Self-Code: sh:( fo:) ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: Unusual
    X-Please-Search-Archive-First: Absolutely Yes
    1. ... Kannst Du mir sagen, wo Du dieses Gerücht her hast? Ich finde bspw. eval wesentlich schlimmer als innerHTML.

      Ich muss gestehen, dass ich jetzt auf Anhieb keine Quelle finde, die das so sagt. Es ist schon eine ganze Weile her, dass ich das gelesen hab.
      Vielleicht erschien es mir auch nur so, da innerHTML nicht zum W3C-Standard gehört.

  2. Hi,

    Wenn ich innerHTML setze, wird das dann intern auch so behandelt?

    nein. Bei innerHTML werden die DOM-Nodes - auch die, die eventuell ergänzt werden ("...innerHTML += ...") - durch ihre String-Repräsentation ersetzt. Bereits vorhandene Event-Handler u.ä., die in Form von JavaScript-Objekten vorliegen, werden vernichtet.

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

    Wird es nicht.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes