Nick: neuen elementenbaum erstellen

moin,
wie kann ich in javascript einen neuen elementenbaum erstellen und den in
eine variable abspeichern, sodass ich z.b. parallel zu document noch mehrere
andere haben kann?
Nick

  1. @@Nick:

    wie kann ich in javascript einen neuen elementenbaum erstellen und den in
    eine variable abspeichern, sodass ich z.b. parallel zu document noch mehrere
    andere haben kann?

    Meinst du es so in der Art?

    var body2 = document.createElement("body");  
    var p = document.createElement("p");  
    var textNode = document.createTextNode("Lorem ipsum dolor sit amet.");  
    p.appendChild(textNode);  
    body2.appendChild(p);
    

    Austausch des alten body gegen body2:

    document.body = body2;

    Wobei ich mir nicht sicher bin, ob dabei der Speicher aufgeräumt wird.

    Live long and prosper,
    Gunnar

    --
    Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
    1. Lieber Gunnar,

      Austausch des alten body gegen body2:

      document.body = body2;

      da würde ich dann doch lieber die alten Kindknoten alle (einzeln) aus document.body entfernen, um anschließend neue Kindknoten einzufügen...

      Liebe Grüße,

      Felix Riesterer.

      --
      ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)
    2. Austausch des alten body gegen body2:

      document.body = body2;

      Das geht natürlich nicht. document.body ist bloß eine Referenz, und das einzige was du hier machst, ist die Objekteigenschaft auf ein anderes Objekt zeigen zu lassen (wenn der Browser das zulässt). Am DOM-Baum ändert sich da nichts. Wenn du den body-Elementknoten durch einen neuen austauschen willst, musst du schon die DOM-Methoden verwenden, hier z.B.

      document.documentElement.replaceChild(neuerBody, document.body);

      Mathias

      1. @@molily:

        Das geht natürlich nicht.

        Hm, im Fuchs 2 geht’s. Andere hatte ich nicht getestet, mea culpa.

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
        1. Hm, im Fuchs 2 geht’s.

          Das ist nicht unbedingt falsch, die body-Eigenschaft ist nicht readonly. Allerdings ist auch m.W. nirgends spezifiziert, was passieren soll, wenn man diese Eigenschaft beschreibt. Ich halte das eher für einen Fehler in DOM HTML, es gibt sonst keinen solchen Fall in DOM Core oder DOM HTML.

          Mathias

  2. wie kann ich in javascript einen neuen elementenbaum erstellen und den in
    eine variable abspeichern, sodass ich z.b. parallel zu document noch mehrere
    andere haben kann?

    Wenn du einen Elementknoten mit removeChild oder replaceChild ersetzt, liefern dir diese beiden Methoden die alten Knoten zurück. Die kannst du in einer Variable speichern und solange diese Variable weiterlebt, hast du auch noch Zugriff auf den ausgehängten Knoten und seine Kindelemente. Darin kannst du dich herumhangeln, aber nicht z.B. mit document.getElementById suchen.

    Mathias