隨意刪除表格的一列
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);'>
只要把這個按鈕放在任何表格的一列中,就可以把這一列刪除,很方便。