hackerboy1993: Tabellenzeilen löschen.

Hallo zusammen.
Ich habe ein Problem:
Ich fülle die ersten 2 Zeilen einer Tabelle mit Php via Html.
Jenachdem was man in diesen Spalten auswählt, werden dann die restlichen Zeilen mittels Javascript und Ajax über Php gefüllt.
Soweit so gut.

Nun möchte ich jedoch vor jedem erneuten füllen alle vorhandenen Tabellenzeilen löschen, mit Ausnahme der beiden Ersten.

Mein Ansatz dazu:
Ich gebe jeder Zeile die ich löschen möchte ein Name attribut. D.h. :

<tr name="zuloeschen"><td>Zelle 1 Zeile 1</td><td>Zelle 2 Zeile 1</td><td>usw.</td></tr>  
<tr name="zuloeschen"><td>Zelle 1 Zeile 2</td><td>Zelle 2 Zeile 2</td><td>usw.</td></tr>  
<tr name="zuloeschen"><td>Zelle 1 Zeile 3</td><td>Zelle 2 Zeile 3</td><td>usw.</td></tr>
~~~usw.  
  
Nun versuche ich schon seit Stunden eine Funktion zu schreiben die diese Zeilen löscht, aber ich kriege es einfach nicht hin.  
  
Wie macht man das?  
  
Danke für eure Hilfen. MFG Hackerboy
  1. Hallo,

    das ist schlecht, wenn mindestens zwei elemente gleich heißen

    P.S.: es ist nicht schlecht sondern Falsch...

    MfG. Christoph

    --
    Wo die Sprache aufhört, fängt die Musik an...
    Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
    Go to this
    1. Ok dann gebe ich halt jeder Zeile eine neue ID.
      Dann mache ich ein for schleife.
       Meine Frage ist:

      document.getElementById("Zeile"+x)  
        
      .löschen? .delete? .innerHTML="" 
      

      Mit welchem Befehl löscht man eine Tabellenzeile?

      MFG Hackerboy

      1. Hi,

        Mit welchem Befehl löscht man eine Tabellenzeile?

        Das table-Element hat eine Methode namens deletRow().

        mfG,
        steckl

        1. Auch diese Variante habe ich bereits versucht.
          Sie entfernt die Zeile nicht richtig.
          Ich hätte gerne die Methode mit "removeChild".
          Jedoch weiss ich nicht wie man diese auf eine solche Tabelle anwenden kann...

          1. Hi,

            Ich hätte gerne die Methode mit "removeChild".
            Jedoch weiss ich nicht wie man diese auf eine solche Tabelle anwenden kann...

            Auf die Gefahr hin, das ich mich wiederhole ;-)
            el.parentNode.removeChild(el) wobei el eine Referenz auf tr darstellt

            Gruesse, Joachim

            --
            Am Ende wird alles gut.
            1. Hallo.
              Danke für deine Antwort. Ich habe es mit deiner Lösung aber leider irgendwie nicht zu Stande gebracht. Ich habe es nun wie folgt gelöst:

                
              function loeschen()  
              {  
              tabellenzeilen=document.getElementById("Tabelle").rows.length;  
                for(var x=0;x<tabellenzeilen;x++)  
                {  
              if (x > 1)  
              {  
              document.getElementById("Tabelle").removeChild(document.getElementById("Tabelle").childNodes[2]);  
              }  
                
              }
              

              Nun werden wie gewünscht alle Tabellenzeilen bis auf die 2 Obersten gelöscht.
              Jedoch vergrössert sich nun bei jedem Ausführen von loeschen(); der Zwischenraum bis zum Tabellenende. Woran liegt das?

              MFG

              1. Hi,

                tabellenzeilen=document.getElementById("Tabelle").rows.length;

                schlecht, denn rows.length verändert sich, wenn Du tr's rausnimmst. Du musst das rückwärts machen.

                So etwa:

                var table =  document.getElementById("DEINE_TABLE_ID);
                var tr    =  table.document.getElementsByTagName("tr");
                var current;

                for (var i = tr.length -1; i > -1; i--) {
                    current =  tr[i];
                    if (!...Deine verneinte Bedingung...) continue; // weitermachen
                    current.parentNode.replaceChild(current);
                }

                Schau Dir aber dennoch mal die DOM-table Methoden an, ich gestehe, ich kenne die nicht so genau. Eventuell lässt sich das noch eleganter lösen.

                Gruesse, Joachim

                --
                Am Ende wird alles gut.
                1. tabellenzeilen=document.getElementById("Tabelle").rows.length;
                  schlecht, denn rows.length verändert sich, wenn Du tr's rausnimmst.

                  Nein. Die Funktion loeschen wird nur Einmal aufgerufen.

                  Entfernt removeChild nur den KindKnoten oder auch alle dessen Unterelemente?

                  Glg Hackeboy1993

                  1. Hi,

                    for(var x=0;x<tabellenzeilen;x++)
                    Nein. Die Funktion loeschen wird nur Einmal aufgerufen.

                    was hat das damit zu tun? Du loopst durch eine Collection, die ihre Anzahl während des Loopens verändert weil Du Elemente entfernst.

                    Entfernt removeChild nur den KindKnoten oder auch alle dessen Unterelemente?

                    Alles, denn wo sollen die Kindeskinder denn hin?

                    Gruesse, Joachim

                    --
                    Am Ende wird alles gut.
                    1. Ok stimmt. Kindeskinder können nur im Kind sein ;-).
                      Auf jeden Fall kann ich ja die Elemente auf meine Art entfernen. Jedoch wird dabei immer die Tabelle Höher. Hat irgendjemand eine Ahnung wiso das so ist?

      2. Hallo,

        Ok dann gebe ich halt jeder Zeile eine neue ID.

        richtig.

        Meine Frage ist:

        document.getElementById("Zeile"+x)

        .löschen? .delete? .innerHTML=""

        
        >   
        > Mit welchem Befehl löscht man eine Tabellenzeile?  
          
        also mit innerHTML schon mal gar nicht... wie wärs denn mit createTextNode ?  
          
        MfG. Christoph
        
        -- 
        Wo die Sprache aufhört, fängt die Musik an...  
        Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)  
          
        Go to [this](http://home.arcor.de/minicrispie/index.html) 
        
        1. Hallo,

          also mit innerHTML schon mal gar nicht... wie wärs denn mit createTextNode ?

          vergess das ... das mit dem deleteRow(von steckl) hab ich ni gewusst ...

          MfG. Christoph

          --
          Wo die Sprache aufhört, fängt die Musik an...
          Selfcode:  ie:( fl:| br:^ va:| ls:/ fo:| rl:? n4:) ss:) de:] js:) ch:{ sh:) mo:) zu:)
          Go to this
        2. Hi,

          Mit welchem Befehl löscht man eine Tabellenzeile?

          also mit innerHTML schon mal gar nicht... wie wärs denn mit createTextNode

          und damit erst recht nicht, denn das erzeugt einen Textknoten.
          el.parentNode.replaceChild(el) ist Dein Freund, wobe el die Referenz auf tr darstellt.

          Gruesse, Joachim

          --
          Am Ende wird alles gut.
    2. Hi,

      das ist schlecht, wenn mindestens zwei elemente gleich heißen
      P.S.: es ist nicht schlecht sondern Falsch...

      nein, ist es nicht. Im Gegenteil, es ist in diesem Fall sogar sinnvoll. So kann man mit getElementsByName() alle Elemente, die man haben will, in *einem* Rutsch abfragen.

      Du verwechselst wohl name und id. Eine id darf tatsächlich nur einmal vorkommen, ein name dagegen beliebig oft. Deswegen gibt getElementsByName() ja auch ein Array der gefundenen Elemente zurück.

      Ciao,
       Martin

      --
      Die letzten Worte der Challenger-Crew:
      Lasst doch mal die Frau ans Steuer!
      1. Hi,

        Hi,

        das ist schlecht, wenn mindestens zwei elemente gleich heißen
        P.S.: es ist nicht schlecht sondern Falsch...

        nein, ist es nicht. Im Gegenteil, es ist in diesem Fall sogar sinnvoll.

        Es dürfen zwar 2 Elemente den gleichen name haben, aber das tr-Element darf kein name-Attribut haben. Der Validator sagt dazu: there is no attribute "NAME".
        Eine Alternative wäre vielleicht class.

        So kann man mit getElementsByName() alle Elemente, die man haben will, in *einem* Rutsch abfragen.

        Das geht mit class leider nicht mehr ganz so leicht. Man muss wohl alle Zeilen durchlaufen und überprüfen ob sie den entsprechenden className haben.

        mfG,
        steckl