隨意刪除表格的一列
Wed, 11 Jul 2007 01:23:53 +0800一般要動態增加或刪除表格中的一個列,可以用表格物件的insertRow以及deleteRow方法。增加一列比較好操作,但是在要刪除一列時,傳入的參數是代表要刪除的列是第幾列,而從dom提供的屬性與方法中,無法直接獲得目前這一列是第幾列的資訊。尤其在不依照順序任意刪除列時,會變得不容易操作。
理論上透過簡單的遞迴其實就可以取得相關的資訊,所以就試了一下:
function rmRow(obj) { var a = traceUp(obj, "TR"); var b = a.previousSibling; var c = 0; while (null != b) { c++; b = b.previousSibling; } d = traceUp(obj, "TABLE"); d.deleteRow(c); } function traceUp(obj, tag) { if (obj.tagName.toUpperCase() == tag.toUpperCase()) { return obj; } else { return traceUp(obj.parentNode, tag); } }
traceUp函數的作用是,傳入一個dom物件,然後傳回tagName符合的第一個上層物件。rmRow函數的作用則是刪除傳入的dom物件目前所在的列。這樣寫是為了方便,看看下面的例子:
<input type='button' value='delete' onclick='rmRow(this);'>
只要把這個按鈕放在任何表格的一列中,就可以把這一列刪除,很方便。