Удалить строку из таблицы по идентификатору
У меня небольшая проблема. У меня есть динамически создаваемые таблицы, и каждая строка имеет идентификатор. Я хочу удалить строку с идентификатором "x".
Я попробовал обычный метод (removeChild), но он явно не работает для таблиц.
function deleteRow(tableid, rowid)
{
document.getElementById(tableid).removeChild(document.getElementById(rowid));
}
Ошибка, которую я получаю: Node не найден "code:" 8
Я также пробовал это:
function deleteRow(tbodyid, rowid)
{
document.getElementById(tbodyid).removeChild(document.getElementById(rowid));
}
и получил ту же ошибку.
Я не могу использовать метод deleteRow()
, потому что ему нужен индекс строки, и я предпочитаю не искать метку id индекса, а затем удалять (даже если я не найду других решений...).
Ответы
Ответ 1
Как насчет:
function deleteRow(rowid)
{
var row = document.getElementById(rowid);
row.parentNode.removeChild(row);
}
И если это не удается, это должно действительно работать:
function deleteRow(rowid)
{
var row = document.getElementById(rowid);
var table = row.parentNode;
while ( table && table.tagName != 'TABLE' )
table = table.parentNode;
if ( !table )
return;
table.deleteRow(row.rowIndex);
}
Ответ 2
в Vilx -:
var table = row.parentNode;
while ( table && table.tagName != 'TABLE' )
table = table.parentNode;
и что, если row.parentNode
TBODY
?
Сначала вы должны проверить это, и после этого
do while
на .tBodies
, возможно
Ответ 3
Из этого post попробуйте этот javascript:
function removeRow(id) {
var tr = document.getElementById(id);
if (tr) {
if (tr.nodeName == 'TR') {
var tbl = tr; // Look up the hierarchy for TABLE
while (tbl != document && tbl.nodeName != 'TABLE') {
tbl = tbl.parentNode;
}
if (tbl && tbl.nodeName == 'TABLE') {
while (tr.hasChildNodes()) {
tr.removeChild( tr.lastChild );
}
tr.parentNode.removeChild( tr );
}
} else {
alert( 'Specified document element is not a TR. id=' + id );
}
} else {
alert( 'Specified document element is not found. id=' + id );
}
}
Я пробовал этот javascript на тестовой странице, и он работал у меня в Firefox.
Ответ 4
А как пробовать не удалять, а скрывать эту строку?
Ответ 5
Родитель строки не является объектом, который вы думаете, это то, что я понимаю из ошибки.
Попробуйте сначала определить родителя строки, затем вы можете быть уверены, что записать в getElementById
часть родительского элемента.
Ответ 6
Что-то быстрое и грязное:
<script type='text/javascript'>
function del_tr(remtr)
{
while((remtr.nodeName.toLowerCase())!='tr')
remtr = remtr.parentNode;
remtr.parentNode.removeChild(remtr);
}
function del_id(id)
{
del_tr(document.getElementById(id));
}
</script>
если вы разместите
<a href='' onclick='del_tr(this);return false;'>x</a>
в любом месте строки, которую вы хотите удалить, чем ее работа без каких-либо идентификаторов