Ich muss den gesamten Tabelleninhalt außer dem Kopf und der Anfangszeile löschen, in der der Benutzer Elemente eingeben kann. Ich führe eine Schleife über die Tabellenlänge, die jede Zeile löscht, die nicht mit der ID der zwei Zeilen übereinstimmt, die ich ausschließen möchte. Es gibt eine Zeile, die nicht mit der Ausnahme in der if-Anweisung übereinstimmen sollte, aber NEVER gelöscht werden. Was ist das Problem? HierTabellenzeile wird überhaupt nicht gelöscht
ist die HTML (bitte nicht die <script src="myscript.js"></script>
, die Sie benötigen bearbeiten):
<HTML>
<body>
<div id="wrapper">
<table align='center' cellspacing=2 cellpadding=5 id="data_table" border=1>
<tbody><tr id="head">
<th>Name</th>
<th>Type</th>
<th>Action</th>
</tr>
<tr id="row-1">
<td id="col-1">AAAA</td><td id="col-2">A</td>
<td id="col-3">
<button type="button" class="edit-button" id="edit-button-1">Edit</button>
<button type="button" class="save-button" id="save-button-1">Save</button>
<button type="button" class="delete-button" id="delete-button-1">Delete</button>
</td>
</tr>
<tr id="row-3"><td id="col-1">BBB</td>
<td id="col-2">B</td><td id="col-3">
<button type="button" class="edit-button" id="edit-button-3">Edit</button>
<button type="button" class="save-button" id="save-button-3">Save</button>
<button type="button" class="delete-button" id="delete-button-3">Delete</button>
</td>
</tr>
<tr id="initial-row">
<td><input id="text-field" type="text"></td>
<td>
<select name="levels-list" id="levels-list">
<option value="A" id="option-1">A</option>
<option value="B" id="option-2">B</option>
<option value="C" id="option-3">C</option>
</select>
</td>
<td><input class="add" id="add-button" value="Add" type="button"></td>
</tr>
<script src="myscript.js"></script>
</tbody>
</table>
</div>
</HTML>
Hier ist das Skript:
var table = document.getElementById("data_table");
for(var y=0; y<table.rows.length; y++)
{
console.log("deleting row "+ y);
if ((table.rows[y].id!= "initial-row") && (table.rows[y].id!= "head"))
{
console.log("inside if statement");
table.deleteRow(y); //delete the row
console.log("row deleted");
}
else{ console.log("inside else. row is not deleted.");}
}//end for
console.log(table.innerHTML);
EDIT: Um zu klären, was ich Tatsächlich ist es so, dass die Tabelle Zeilen enthält, denen folglich ids zugeordnet sind (Zeile-1, Zeile-2, Zeile-2, Zeile-3). Die Tabelle basiert auf Elementen, die von einem Array gelesen werden. Es gibt eine Schaltfläche zum Löschen. Wenn ein Element gelöscht wird, lösche ich es mit table.deleteRow(rowindex);
und lösche die Werte dieser Zeile aus einem Array. Die Tabellenzeilen-IDs werden nach dem Löschen nicht aufeinanderfolgend. Daher möchte ich alle Zeilen mit Ausnahme der ursprünglichen Zeilen (den Kopf und die ursprüngliche Eingabe) löschen und die IDs erneut berechnen und die neue Tabelle mit neuen IDs nach den gelöschten Elementen erstellen. Die Tabellenzeilen werden in der Reihenfolge ihrer Reihenfolge ohne Lücken angezeigt. Das ist wichtig für mich.
mich ausschließen Angenommen, Sie haben beim Löschen von Zeilen tatsächlich die Anzahl aller folgenden Zeilen geändert. Angenommen, es gibt vier Zeilen in Ihrer Tabelle und Sie löschen die zweite (y = 2), die dritte wird die zweite und die vierte wird die dritte. Dann wird y zu 3 und Sie löschen die neue dritte Zeile, die die vierte war. Daher wird die neue zweite/alte dritte Zeile niemals gelöscht ... Sie sollten stattdessen eine while-Schleife verwenden und y nur erhöhen, wenn Sie keine Zeile gelöscht haben. –
@Johannes Lemonde danke. Aber deine Lösung hat nicht geholfen. Es führte einen Fehler ein, der besagt, dass "table.rows [y] nicht definiert ist". – user7945230