Удалить строку из таблицы по идентификатору

У меня небольшая проблема. У меня есть динамически создаваемые таблицы, и каждая строка имеет идентификатор. Я хочу удалить строку с идентификатором "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>

в любом месте строки, которую вы хотите удалить, чем ее работа без каких-либо идентификаторов