2013-04-28 13 views
7

Ich habe Probleme mit einer Funktion in Javascript und kann nicht herausfinden, warum. Es ist wirklich ziemlich geradlinig. Ich versuche, alle Zeilen in einer HTML-Tabelle zu löschen. so schrieb ich:Löschen von Tabellenzeilen in Javascript

function delete_gameboard(){ 
    var table = document.getElementById("gameboard"); 
    var rowCount = table.rows.length; 
    for (var i = 0; i < rowCount; i++) { 
     table.deleteRow(i); 
    } 
} 

Doch es wird nur die Hälfte von ihnen löschen. Kann jemand sehen, was dieses seltsame Verhalten verursacht?

+5

Wahrscheinlich, wenn Sie löschen eine Zeile, die Indizes der Zeilen gehen nach unten. Versuchen Sie: 'table.deleteRow (0);' – acdcjunior

Antwort

23

Da Zeile 0, dann die nächste Zeile wird die Zeile 0, löschen, wenn Sie die erste Zeile löschen, wird die zweite Zeile werden das erste ist dynamisch.

Sie könnten wie tun:

while(table.rows.length > 0) { 
    table.deleteRow(0); 
} 
+0

Hilft, diese Dinge zu visualisieren oder im Pseudocode grafisch durchzulaufen :) Aber ja, das ist ein Versehen, das man nicht mehr als einmal machen will! – clearlight

2

Die table Reihen ist live, das ist, wenn man nur immer wieder löschen Zeile 0

function delete_gameboard(){ 
    var table = document.getElementById("gameboard"); 
    var rowCount = table.rows.length; 
    for (var i=0; i < rowCount; i++) { 
     table.deleteRow(0); 
    } 
} 
3

Wenn Sie die erste Zeile löschen, die zweite Reihe die neue erste Reihe wird.

Ich ziehe es, dies zu tun:

while(table.rows[0]) table.deleteRow(0); 
+0

wirklich ist Ihre Methode sehr gut, aber auf beiden Seiten, wenn "1" dann ohne Header die Tabelle Daten putzen. – Virbhadrasinh

2
function delete_gameboard(){ 
var table = document.getElementById("gameboard"); 
var rowCount = table.rows.length; 
for (var i=rowcount-1; i >=0; i--) { 
    table.deleteRow(i); 
} 
} 

Der Index der Zeile ändert sich, wenn Sie es löschen. Verwenden Sie eine umgekehrte Schleife. Dies ist auch hilfreich, wenn Sie eine Bedingung zum Löschen von Zeilen verwenden. Wenn Sie alle Zeilen löschen, verwenden Sie die folgende

while(table.rows.length) { 
    table.deleteRow(0); 
} 
5

diese Bedenken Sie:

index 0: row #1 
index 1: row #2 
index 2: row #3 
index 3: row #4 
index 4: row #5 

Sie Index # 2 (Zeile # 3) löschen, so dass die DOM-Engine die Indexschlüssel passt und Sie am Ende mit:

index 0: row #1 
index 1: row #2 
index 2: row #4 <---hey! index #2 is still there 
index 3: row #5 

Sie sind im Grunde ein Loch an der Stelle zu graben, wo Sie stehen, so wie Sie tiefer graben, natürlich Sie tiefer sinken und nie irgendwelche Fortschritte sehen ... bis Sie aus Reihen laufen zu Löschen Sie in der Tabelle.

-2

Wenn Sie JQuery verwenden in Ihrem Code dann der einfachste Weg, um die Zeilen wird mit dem folgenden Code zu löschen:

$('#myTable tbody').html(''); 
+0

Es gibt kein jQuery-Tag, daher müssen Antworten in reinem JS sein. Dies ist bestenfalls ein Kommentar, aber keine Antwort. –

0
function delRow() 
    { 
    var current = window.event.srcElement; 
    //here we will delete the line 
    while ((current = current.parentElement) && current.tagName !="TR"); 
    current.parentElement.removeChild(current); 
    } 
0

Sie könnten einfach gehen:

document.getElementById("gameboard").innerHTML = ""; 
+0

Fügen Sie eine Erklärung mit der Antwort hinzu, wie diese Antwort dem aktuellen Problem helfen kann –

Verwandte Themen