Удалить строку из таблицы по идентификатору - PullRequest
19 голосов
/ 11 февраля 2011

У меня маленькая проблема. У меня есть несколько динамически создаваемых таблиц, и у каждой строки есть идентификатор. Я хочу удалить строку с идентификатором "x".

Я попробовал обычный метод (removeChild), но он явно не работает для таблиц.

function deleteRow(tableid, rowid)  
{   
      document.getElementById(tableid).removeChild(document.getElementById(rowid));  
}   

Я получаю ошибку: узел не найден "code:" 8

Я тоже пробовал это:

function deleteRow(tbodyid, rowid)   
{  
      document.getElementById(tbodyid).removeChild(document.getElementById(rowid));   
}   

и получил ту же ошибку.

Я не могу использовать метод deleteRow(), потому что для этого нужен индекс строки, и я предпочитаю не искать идентификатор, пометить индекс, а затем удалить (даже если я не найду других решений ... ).

Ответы [ 6 ]

66 голосов
/ 11 февраля 2011

Как насчет:

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);
}
3 голосов
/ 08 сентября 2011

в Vilx -:

var table = row.parentNode;
while ( table && table.tagName != 'TABLE' )
    table = table.parentNode;

и что если row.parentNode равно TBODY?

Сначала вы должны проверить это, а после этого сделать while на .tBodies, вероятно

2 голосов
/ 11 февраля 2011

Из этого поста , попробуйте этот 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.

1 голос
/ 11 февраля 2011

А как насчет попытки не удалить, а скрыть эту строку?

0 голосов
/ 18 февраля 2014

Что-то быстрое и грязное:

<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>

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

0 голосов
/ 11 февраля 2011

Родитель строки не тот объект, о котором вы думаете, это то, что я понимаю из ошибки.
Попробуйте сначала определить родителя строки, затем вы можете быть уверены, что записать в getElementById часть родителя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...