Jürgen Berkemeier: innerHTML und DOM

Hallo,

ich möchte innerhalb einer Seite einen Knoten einschließlich seiner Child-Knoten (Text, Kursiver Text, fetter Text, Zeilenumbruch) an eine andere Stelle kopieren. Hierzu benutze ich "document.getElementsByTagName("span")[i].innerHTML". Leider wird die Eigenschaft "innerHTML" nur vom IE unterstützt. Nun meine Frage: Gibt es im DOM eine Möglichkeit, auf ganze Knoten einschließlich aller Child-Knoten zuzugreifen?

Danke,   Jürgen

  1. Hi,

    Nun meine Frage: Gibt es im DOM eine Möglichkeit, auf ganze Knoten einschließlich aller Child-Knoten zuzugreifen?

    Indem Du einfach auf diesen Knoten zugreifst. Seine Kinder werden mitkopiert - es sind ja seine Kinder.

    Viele Grüße,
    Martin

    PS: Gibt es auch _halbe_ Knoten?

    1. Hallo,

      Nun meine Frage: Gibt es im DOM eine Möglichkeit, auf ganze Knoten einschließlich aller Child-Knoten zuzugreifen?

      Indem Du einfach auf diesen Knoten zugreifst. Seine Kinder werden mitkopiert - es sind ja seine Kinder.

      Tja, leider liefert
      document.getElementsByTagName("span")[1] = document.getElementsByTagName("span")[0] ;

      die Fehlermeldung "Das Objekt unterstützt diese Eigenschaft oder Methode nicht".

      Gruß,   Jürgen

  2. Hallo,

    ich möchte innerhalb einer Seite einen Knoten einschließlich seiner Child-Knoten (Text, Kursiver Text, fetter Text, Zeilenumbruch) an eine andere Stelle kopieren. Hierzu benutze ich "document.getElementsByTagName("span")[i].innerHTML". Leider wird die Eigenschaft "innerHTML" nur vom IE unterstützt. Nun meine Frage: Gibt es im DOM eine Möglichkeit, auf ganze Knoten einschließlich aller Child-Knoten zuzugreifen?

    Ist recht umständlich, weil du, wenn du was austauschen willst, immer ein Element bilden mußt:

    a= document.createElement("table");
    b=document.createElement("tr");
    c=document.createElement("td");

    Dann das ganze an den Elementenbaum anhängen:

    iii =document.getElementById("dasda");

    dasda.appendChild(a);
    dasda.appendChild(b);
    dasda.appendChild(b);

    Und dann hast du noch nicht mal Text in der Tabelle. Den mußt du wieder auf dieselbe Weise anfügen.

    Nimm doch innerHTML, das ist generell DOM-kompatibel.

    Ciao

    W. Pichler

  3. Hallo,

    ich möchte innerhalb einer Seite einen Knoten einschließlich seiner Child-Knoten (Text, Kursiver Text, fetter Text, Zeilenumbruch) an eine andere Stelle kopieren. Hierzu benutze ich "document.getElementsByTagName("span")[i].innerHTML". Leider wird die Eigenschaft "innerHTML" nur vom IE unterstützt. Nun meine Frage: Gibt es im DOM eine Möglichkeit, auf ganze Knoten einschließlich aller Child-Knoten zuzugreifen?

    Das Klonen von Knoten funktioniert in IE und Mozilla (wobei auch Mozilla innerHTML kennt):

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Test by TM 03/02</title>
    <meta name="Author" content="Dr. Thomas Meinike - thomas@handmadecode.de">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript" type="text/javascript">
    <!--

    function Klonen()
    {
      var neu, clone;
      clone=document.getElementsByTagName("span")[0];            // zu klonendes span-Element
      neu=document.createElement("span");                        // neues span-Element erstellen
      document.getElementsByTagName("body")[0].appendChild(neu); // neues span-Element nach body einhaengen
      clone=clone.childNodes[0].cloneNode(clone);                // Inhalt unter zu klonendem span-Element lesen
      neu.appendChild(clone);                                    // diesen Inhalt unterhalb des neuen span-Elements einfuegen
    }

    //-->
    </script>
    </head>
    <body>
    <form action="">
    <input type="button" value="Test" onclick="Klonen()">
    </form>
    <span><strong>Text<br></strong></span>
    </body>
    </html>

    MfG, Thomas

    1. Hallo Thomas,

      vielen Dank für Deine ausführliche Antwort.
      Übrigens,  mit

      function Replace()
      {
        var tmp ;
          tmp = document.getElementsByTagName("span")[0] ;
          tmp = tmp.childNodes[0].cloneNode(tmp);
          document.getElementsByTagName("span")[1].replaceChild(tmp,document.getElementsByTagName("span")[1].firstChild) ;
      }

      kann man den Inhalt eines Knotens durch den eines anderen ersetzen.

      Gruß,   Jürgen