Martin Lenz: Element nicht wiederverwertbar für appendChild()?

Hallo,

ich versuche in ein Element (hier das mit id testel) Inhalt einzufügen (el ist bereits geholt, hier nicht gezeigt):
  var text = document.createTextNode('Test');
  var newp = document.createElement("p");
  newp.appendChild(text);
  el.appendChild(newp);

Das funktioniert. Nun soll das gleiche p-Element aber mehrfach an tel angefügt werden. An obigen Code einfach nochmal
  el.appendChild(newp);
anzuhängen bringt aber nichts. Selbst
  newp = document.createElement("p");
  newp.appendChild(text);
  el.appendChild(newp);
nicht. Nein, alle vier Zeilen müssen es sein.

Und genau das verstehe ich nicht, denn sowohl den Textnode als auch das Element sind doch schon erzeugt. Weshalb können die nicht einfach mehrfach angefügt werden?

Auf Erhellung hoffend,
Martin

  1. Hi,

    Nun soll das gleiche p-Element aber mehrfach an tel angefügt werden.

    ah ja. Du willst das selbe Ei mehrfach essen. Das ist unappetitlich!

    Und genau das verstehe ich nicht, denn sowohl den Textnode als auch das Element sind doch schon erzeugt.

    Richtig, und sie befinden sich bereits im Dokumentbaum. Sollen sie irgendwo anders hin, müssen sie zunächst dort entfernt werden, wo sie gerade sind. So steht es geschrieben.

    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
    1. Hallo,

      Richtig, und sie befinden sich bereits im Dokumentbaum. Sollen sie irgendwo anders hin, müssen sie zunächst dort entfernt werden, wo sie gerade sind. So steht es geschrieben.

      In SelfHTML? Dann muß ich das wohl überlesen haben.

      Ciao,
      Martin

  2. Hallo Martin,

    die mit create... erzeugten Elemente sind einmalig. Wenn du mehrere gleiche Knoten erzeugen und an verschiedenen Stellen einhängen willst, musst Du sie mit clodeNode (http://de.selfhtml.org/javascript/objekte/node.htm#clone_node) vervielfältigen oder jedesmal neu erzeugen. In Deinem Beispiel hast Du zwar das p, nicht aber den Text neu erzeugt.

    Gruß, Jürgen

    1. Hi Jürgen,

      die mit create... erzeugten Elemente sind einmalig. Wenn du mehrere gleiche Knoten erzeugen und an verschiedenen Stellen einhängen willst, musst Du sie mit clodeNode (http://de.selfhtml.org/javascript/objekte/node.htm#clone_node) vervielfältigen oder jedesmal neu erzeugen. In Deinem Beispiel hast Du zwar das p, nicht aber den Text neu erzeugt.

      Ja, ich hatte nicht erwartet daß das Einwegobjekte sind. Es wird aber wohl nur ein Zeiger darauf ins Ziel eingefügt, dann wäre das zu verstehen.

      Aber gut, newp zu erzeugen und dann
        el.appendChild(newp.cloneNode(true));
      wiederholt zu schreiben (oder in eine Schleife zu packen) funktioniert gut.

      Gruß und Danke,
      Martin