動態添加刪除table頁面一行input表格,tableinput
之前寫過兩篇關於HTML頁面添加結點,刪除結點的博文。今天偶然看到一個網友詢問JSP頁面上動態給表格增加行,刪除行,碰巧那會兒比較閑,就動手寫了一下,記錄下來,希望能幫到需要的朋友們。
初始版本
<html><head><title>Table</title></head><body><table border="1"><thead><tr><td>First Name</td><td>Last Name</td><td> </td></tr><thead><tbody id="tb"><tr id="1st"><td>張</td><td>三</td><td><input type="button" value="Add" onclick="add()"> <input type="button" value="Del" onclick="del(this)"></td></tr></tbody></table></body></html><script>function add() {var trObj = document.createElement("tr");trObj.id = new Date().getTime();trObj.innerHTML = "<td><input name='firstName'/></td><td><input name='lastName'/></td><td><input type='button' value='Add' onclick='add()'> <input type='button' value='Del' onclick='del(this)'></td>";document.getElementById("tb").appendChild(trObj);}function del(obj) {var trId = obj.parentNode.parentNode.id;var trObj = document.getElementById(trId);document.getElementById("tb").removeChild(trObj);}</script>
上面的代碼中,首先在body中構造了一個table,為了方便後續的操作,我們給table添加了thead 和 tbody 標籤,thead標籤標示的是表格頭,tbody標籤標示的是表格主體。
樣本中的表格,共有三列,第一列 first name,第二列 last name,第三列為操作列。
操作列中,包含兩個操作,一個是給表格添加行,一個是刪除當前行。添加行和刪除行的操作分別綁在兩個按鈕上,點擊按鈕時,觸發相應的添加行/ 刪除行 操作。
添加行方法
function add() {var trObj = document.createElement("tr");trObj.id = new Date().getTime();trObj.innerHTML = "<td><input name='firstName'/></td><td><input name='lastName'/></td><td><input type='button' value='Add' onclick='add()'> <input type='button' value='Del' onclick='del(this)'></td>";document.getElementById("tb").appendChild(trObj);}
第一行,建立tr元素,即建立一個表格行。
第二行,trObj.id = new Date().getTime(); 給改行添加id 屬性,並給屬性賦值,取當前系統的毫秒數,這個主要是刪除的時候需要。
第三行,trObj.innerHTML = "<td><input name='firstName'/></td><td><input name='lastName'/></td><td><input type='button' value='Add' onclick='add()'>
<input type='button' value='Del' onclick='del(this)'></td>"; 給表格行賦值,通過innerHTMML屬性,設定<tr>標籤和</tr> 標籤間的html代碼內容,也就是要添加的行內容。
第四行,document.getElementById("tb").appendChild(trObj); 將建立好的表格行添加到表格主體中。
刪除行方法
function del(obj) {var trId = obj.parentNode.parentNode.id;var trObj = document.getElementById(trId);document.getElementById("tb").removeChild(trObj);}
刪除方法中傳遞了一個參數,在添加行方法中,我們可以看到刪除方法del 中傳遞了this參數,頁面代碼中的this指代的是當前的HTML元素,即this所在的<input >域。
第一行,var trId = obj.parentNode.parentNode.id; 擷取當前元素的父節點的父節點的id,即要刪除的行的id 。
第二行,var trObj = document.getElementById(trId); 擷取要刪除的行元素。
第三行,document.getElementById("tb").removeChild(trObj); 在表格主體中刪除該行。
瑕疵
上面的代碼基本實現了動態給表格增加行和刪除行的功能,但是代碼還有瑕疵,主要有這麼兩點:
1 表格在增加行前和增加行後,表格寬度發生變化
增加行前
增加行後
增加行後,表格列變寬了
2 瀏覽器預設開啟的頁面中文出現亂碼
需要 通過前面介紹過的設定編碼的方式 修改頁面編碼格式後才能正常顯示。