stephan: Elementknoten aus anderem Frame kopieren

Gibt es eine Möglichkeit, einen Elementknoten aus einem anderen Frame zu kopieren (document.cloneNode(Knoten, true) schlägt fehl, da die Objekte offensichtlich als Zeiger verwaltet werden und fest einem document zugeordnet sind, ich kann also zuweisen, wie ich dumm und lustig bin, der Knoten will nicht aus dem Frame heraus).

Ich beabsichtige, eine Seite in einem Frame zu laden und deren Inhalt in einen Elementknoten eines anderen Frames einzufügen. Dazu müssten alle Knoten des Body von Frame1 kopiert und an entsprechender Stelle in Frame2 angehängt werden.

Natürlich könnte man alle Knoten auslesen, deren Attribute/Kinder ebenfalls und anhand dieser Informationen in Frame2 neue Knoten erzeugen  (sprich - die cloneNode-Methode neu schreiben), das würde aber aufgrund der Langsamkeit von Javascript wohl länger dauern als angemessen.

Ich wäre für Hilfe sehr dankbar.

  1. hi,

    Gibt es eine Möglichkeit, einen Elementknoten aus einem anderen Frame zu kopieren (document.cloneNode(Knoten, true) schlägt fehl, da die Objekte offensichtlich als Zeiger verwaltet werden

    hast du dich vor document auch auf das entsprechende frame bezogen?

    gruss,
    wahsaga

    1. natürlich - und zwar auf allen möglichen Wegen. Da ich an die Kinder vom body heranwill, geht das mit Frame1.document.getElementsByTagName("body")[0].firstChild (bzw. analog) oder Frame1.document.body.firstChild (wie auch immer). Die cloneNode-Methode habe ich auch aus beiden document-Objekten aufgerufen, das Ergebnis ist in Frame2 aber nicht greifbar (NS/Mozilla uncaught exception ...) IE (komisches Argument oder so ähnlich). Das Ergebnis ist im IE von Typ: "#document-fragment" (noch nie gesehen) und im NS eine Null-Pointer-Exception (schon öfter gesehen ;)). Im Frame1 war's aber ein Textknoten :( Im Opera funktioniert's natürlich auch nicht, aber der schweigt sich ja aus...

      1. natürlich - und zwar auf allen möglichen Wegen. Da ich an die Kinder vom body heranwill, geht das mit Frame1.document.getElementsByTagName("body")[0].firstChild

        Mag sein, dass ich mich vertue. Aber wenn du das body-Objekt kopieren willst, warum beziehst du dich dann nur auf den 1. Kindknoten? Der enthält meinem Verständnis nach nömlich nicht alles, was body enthält.
        Frame1.document.getElementsByTagName("body")[0].cloneNode(true) scheint mir sinniger.

        Grüsse,
          Christian

        --
        Erfahrung ist die Summe der Dummheiten, die man im Bedarfsfall wieder anwendet. (Dieter Hildebrand, Kabarettist)
  2. Hallo Stephan.

    Gibt es eine Möglichkeit, einen Elementknoten aus einem anderen Frame zu kopieren (document.cloneNode(Knoten, true) schlägt fehl, da die Objekte offensichtlich als Zeiger verwaltet werden und fest einem document zugeordnet sind, ich kann also zuweisen, wie ich dumm und lustig bin, der Knoten will nicht aus dem Frame heraus).

    1. laut SelfHTML wird die Funktion cloneNode mit zuKopierenderKnoten.cloneNode( Unterelemente_kopieren ) aufgerufen. Ich weiß nicht, ob die von dir gebrauchte Syntax auch gültig ist / von den Browsern akzeptiert wird, aber ich würde es erstmal so probieren. (http://selfhtml.teamone.dejavascript/objekte/node.htm#clone_node)

    2. Müsstest du wie aus 1. folgt den zu kopierenden Knoten ansprechen. Also in Deinem Fall auf das _body_-Element des 1. Frames zugreifen, cloneNode auf es anwenden und die Rückgabe in die Elementstruktur des 2. Frames einhängen.
    Dazu musst du auf die beiden Frames zugreiffen. Dazu kannst du entweder mit parent arbeiten oder mit top, je nachdem, welcher Weg bei dir kürzer ist (mag auch noch direktere Wege geben, fallen mir aber grad nicht ein). Zu beidem kannst du dich ebenfalls in Selfhtml schlau machen.

    Grüsse,
      Christian

    --
    Erfahrung ist die Summe der Dummheiten, die man im Bedarfsfall wieder anwendet. (Dieter Hildebrand, Kabarettist)
    1. Slash vergessen. http://selfhtml.teamone.de/javascript/objekte/node.htm#clone_node

      Grüsse,
        Christian

      --
      Erfahrung ist die Summe der Dummheiten, die man im Bedarfsfall wieder anwendet. (Dieter Hildebrand, Kabarettist)
  3. Hallo,

    Gibt es eine Möglichkeit, einen Elementknoten aus einem anderen Frame zu kopieren (document.cloneNode(Knoten, true) schlägt fehl,

    Im IE schlaegt das fehl, unter Mozilla dagegen nicht. Im IE hilft aber outerHTML. Hier mal ein Testcase (funktioniert mit Mozilla 1.x, Opera 7.x, IE 5.5, 6.0):

    [frameset_a_b.htm]

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
    <html>
    <head>
    <title>Test by TM 01/04</title>
    </head>
    <frameset cols="200,*">
    <frame src="fra.htm" name="fra">
    <frame src="frb.htm" name="frb">
    <noframes>
    <body>
    <p>Mach was draus ...</p>
    </body>
    </noframes>
    </frameset>
    </html>

    ------------------------------------------------------------------------------------------------------------

    [fra.htm]

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 01/04</title>
    <script language="JavaScript" type="text/javascript">
    <!--

    function cloneYourLover()
    {
      var obj,clone;
      obj=document.getElementsByTagName("p").item(0);
      clone=obj.cloneNode(true);
      if(parent.frames["frb"].document.body.outerHTML)
      parent.frames["frb"].document.body.insertAdjacentHTML("beforeEnd",obj.outerHTML);
      else parent.frames["frb"].document.body.appendChild(clone);
    }

    //-->
    </script>
    </head>
    <body>
    <form action="">
    <input type="button" value="Clone your lover" onclick="cloneYourLover()">
    </form>
    <p>Lover</p>
    </body>
    </html>

    ------------------------------------------------------------------------------------------------------------

    [frb.htm]

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 01/04</title>
    </head>
    <body>
    <p>Your cloned ...</p>
    </body>
    </html>

    MfG, Thomas

    --
    SVG - Learning By Coding
    http://svglbc.datenverdrahten.de/
  4. Verzeihung - alles zurück!
    Ich habe mich selbst disqualifiziert!

    Vielen Dank an Christian - genau da liegt der Hase im Pfeffer.
    Voller Arroganz war ich der Meinung, noch im Kopf zu haben, dass die cloneNode-Methode am document-Objekt hing. Das tut sie natürlich nicht, jeder Elementknoten hat seine eigene, und die hat auch nur ein Argument (nämlich einen boolean, ob die Kinder mitgeklont werden sollen oder nicht). Ich glaube, ich lese in Zukunft dochh noch mal nach, auch wenn ich mir ganz sicher bin (peinlich).
    Geklonte Knoten hängen dann quasi in der Luft und können bewegt werden, wohin auch immer (so soll es ja auch sein ;)).

    An alle nochmal herzlichen Dank!

    P.S.: das ...firstChild war nur ein Beispiel für eins der Kinder (eben mal das erste), den body an sich zu klonen macht für meinen Anwendungsfall keinen Sinn