2011-02-11 38 views
16

我有一个小问题。我有一些动态创建的表,每行都有一个ID。我想删除ID为“x”的行。通过编号从表中删除一行

我尝试了通常的方法(removeChild),但它不适用于表格。

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

我得到的错误是:节点未找到 “代码:” 8

我也试过这样:

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

,并得到了同样的错误。

我不能使用deleteRow()方法,因为那个需要行的索引,我宁愿不搜索id标记索引然后删除(即使如果我没有找到其他解决方案...) 。

+0

你可以通过`rowElement.rowIndex`获得行索引... – 2011-02-11 09:11:50

+0

你可以添加一个示例表来测试,这可能是表的设计方式奇怪。 – 2011-02-11 09:20:27

回答

55

如何:

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); 
} 
1

那么试图不删除,但隐藏该行?

+0

呃...除了大约80000的事实,它会工作很糟糕...我检查它的存在,然后从它获得数据,如果它存在(我可以检查显示:没有也,但我认为是更快检查未定义)。 – zozo 2011-02-11 09:14:28

0

行的父是不是你认为的对象,这是我从理解错误。
尝试首先检测行的父项,然后确定要将哪些内容写入父项的getElementById部分。

2

从这个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为我工作。

3

到Vilx-:

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

,以及如果row.parentNodeTBODY

你应该看看第一,那 后做while通过.tBodies,可能

0

东西快速和肮脏的:

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

内的任何地方你想要删除的行,比它的工作没有任何ID号

相关问题