2011-02-11 91 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號

相關問題