bernd: tr Kopieren

Hallo zusammen,

aus einer Tabelle möchte ich ein komplettes "tr" kopieren mit Inhalt.
Der IE 7.0 macht das anstandslos, die neuen trs werden unten angehögt.
Der FF 2.0, leider nicht, bei dem werden die trs rechts von dem Eltern(oder Ausgang) tr angeordnet.
Wie kann ich den FF dazu bringen, die neuen trs unterhalb anzuzeigen?

Meine Html Seite mit JavaScript Funktion sieht folgender Maßen aus:

  
<html>  
<head>  
    <script type="text/javascript">  
    function tr_klonen(id)  
    {  
      var objekt, kopie;  
  
      objekt = document.getElementById( id );  
      if(objekt)  
      {  
        kopie=objekt.cloneNode( objekt.firstChild );  
        document.getElementById( id ).appendChild( kopie );  
      }  
    }  
    </script>  
</head>  
<body>  
    <table border="1">  
        <tr id="tr1" onclick="tr_klonen( 'tr1' );">  
            <td id="td1">nur ein test text 1</td>  
            <td id="td1">nur ein test text 1</td>  
        </tr>  
        <tr id="tr2" onclick="tr_klonen('tr2');">  
            <td id="td2">nur ein test text 2</td>  
            <td id="td1">nur ein test text 1</td>  
        </tr>  
        <tr id="tr3" onclick="tr_klonen( 'tr3' );">  
            <td id="td3">nur ein test text 3</td>  
            <td id="td1">nur ein test text 1</td>  
        </tr>  
    </table>  
</body>  
</html>  

Über das "Add_ons" "View Sorurce Chart" bei FF kann ich sehen, dass die neuen trs in dem "Eltern" tr erzeugt worden sind.
Die Funktion habe ich im Netz gefunden.

Grüße
bernd

  1. Hi,

    Der IE 7.0 macht das anstandslos, die neuen trs werden unten angehögt.

    Der macht halt nicht das, was Du sagst, sondern irgendwas.

    <tr id="tr1" onclick="tr_klonen( 'tr1' );">

    function tr_klonen(id)
        {
          objekt = document.getElementById( id );

    objekt ist also die tr.

    if(objekt)
          {
            kopie=objekt.cloneNode( objekt.firstChild );

    Ohoh. firstChild ist gefährlich. Je nach Browser kann das auch mal ein Textknoten sein (der den whitespace zwischen den tags enthält).

    document.getElementById( id ).appendChild( kopie );

    document.getElementById( id ) ist ebenfalls die tr. Und in diese tr hängst Du am Ende ein Kind ein.
    Wieso wunderst Du Dich dann, wenn Dein neues Element in der tr landet?

    }
        }

    <td id="td1">nur ein test text 1</td>
                <td id="td1">nur ein test text 1</td>

    id-Werte müssen eindeutig sein.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hallo,

      Der IE 7.0 macht das anstandslos, die neuen trs werden unten angehögt.

      Der macht halt nicht das, was Du sagst, sondern irgendwas.

      ok, wie kann ich den eigentliche "tr" "ausfiltern" und weiter verarbeiten.

      <td id="td1">nur ein test text 1</td>
                  <td id="td1">nur ein test text 1</td>

      id-Werte müssen eindeutig sein.

      Die Angaben in den tds sind gleich göltig, wichtig ist, dass sie nicht die gleiche ID habe wie das tr, dh. für mich im gesamten Dokument eindeutig.
      <tr id="tr1" onclick="tr_klonen( 'tr1' );">

      Bin bereit auf Vorschläge

      grüße bernd

      1. Hi,

        ok, wie kann ich den eigentliche "tr" "ausfiltern" und weiter verarbeiten.

        indem Du das richtige nimmst, daraus das richtige erzeugst und es auf richtige Weise an die richtige Stelle packst. Die Werkzeuge dafür kennst Du.

        id-Werte müssen eindeutig sein.
        Die Angaben in den tds sind gleich göltig,

        Dann funktioniert entweder alles[1], oder Du weißt _sehr_ genau, was Du tust. In beiden Fällen würdest Du nicht fragen.

        <tr id="tr1" onclick="tr_klonen( 'tr1' );">

        Warum übergibst Du eigentlich nicht gleich die Tabellenzeile, sondern nur ihre ID, so dass die Zeile erst wieder umständlich gesucht werden muss?

        Cheatah

        [1] Wobei Deine Schlussfolgerung dann auch nur scheinbar ist.

        --
        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 zusammen,

          danke an mbr, Dein Tipp hat funktioniert die JS Funktion sieht es folgender Maßen aus:

            
          <script type="text/javascript">  
          function tr_klonen(id)  
              {  
                var objekt, kopie;  
            
                objekt = document.getElementById( id );  
                if(objekt)  
                {  
                    kopie=objekt.cloneNode( objekt.firstChild );  
                   objekt.parentNode.appendChild(kopie );  
                }  
              }  
          </script>  
          
          

          Funktioniert in beiden Browsern.
          Das eigentliche Verfahren habe ich leider nicht auf Anhieb verstanden :-(((, wo Cheatah und mbr Recht haben.
          Danke an alle Beteiligen.
          Ein schönes Wochenende

          grüße bernd

          1. Hi,

            Funktioniert in beiden Browsern.

            Sorry, aber das ist Murks!

            Das eigentliche Verfahren habe ich leider nicht auf Anhieb verstanden :-(((,

            Mir scheint, jetzt immer noch nicht.

            Und damit später kein Archivsuchender über das "funktioniert" stolpert, hier der (hoffentlich - untested ;)) korrekte Weg:

            <!-- aktuelle TR (this) kopieren und dafür neue ID verwenden -->
            <tr id="tr1" onclick="tr_klonen(this,'trNeu')">

              
             function tr_klonen(obj,newID) {  
              var kopie;  
              // Kann der Browser das überhaupt?  
              if(obj.cloneNode) {  
               // TR mit Kindern kopieren  
               kopie=obj.cloneNode(true);  
               // Der Kopie ggf. eine neue ID geben  
               if(newID) {  
                // Entweder die uebergebene ID setzen, oder ...  
                kopie.id=newID;  
               } else if(kopie.id) {  
                // ... falls keine neue ID übergeben wurde nur vorhandene ID loeschen  
                kopie.id="";  
               }  
               // Kopie in das Elternelement einhängen  
               obj.parentNode.appendChild(kopie );  
              }  
             }  
            
            

            Gruß, Cybaer

            --
            Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
      2. Hallo Bernd,

        abgesehen von dem, was MudGuard schon sagte, scheint es mir, dass du cloneNode falsch benutzt laut SELFHTML bekommt cloneNode als Parameter lediglich ein true - falls Unterknoten mitkopiert werden sollen, oder ein false, falls nicht. In deinem Fall muss man wohl true übergeben.

        Was das Einfügen unterhalb des letzten trs angeht: Hast du mal folgendes probiert:

          
        object.parentNode.AppendChild(kopie);  
        
        

        liebe Grüße mbr

        P.S.: wenn hier immer mal wieder darauf hingewiesen wird, eine ID müsse eindeutig sein, dann passiert das nicht aus Korinthenka..., sondern weil es tatsächlich so vorgeschrieben ist. Eine ID muss für _den Browser_ dokumentweit eindeutig sein. Ob sie für _dich_ eindeutig ist, interessiert erstmal weniger. Wenn dann irgendwas nicht geht, suchst du evtl. stundenlang nach dem Fehler und das Gejammer ist groß, dabei wäre alles (vielleicht) so einfach gewesen: eindeutige id vergeben, und gut ist.

        1. Hallo mbr.

          Was das Einfügen unterhalb des letzten trs angeht: Hast du mal folgendes probiert:

          object.parentNode.AppendChild(kopie);

          
          >   
          > liebe Grüße mbr  
          >   
          > P.S.: wenn hier immer mal wieder darauf hingewiesen wird, eine ID müsse eindeutig sein, dann passiert das nicht aus Korinthenka..., […]  
            
          Wo wir gerade dabei sind: es heißt „appendChild“.  
            
            
          Einen schönen Freitag noch.  
            
          Gruß, Mathias  
          
          -- 
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|  
            
          debian/rules