js新增、刪除table和table中input
實際效果:點擊添加按鈕添加新的一行,在行內可對數據進行編輯和刪除

源代碼:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style type="text/css">
table, th, td
{
border: 1px solid black;
}
</style>
</head>
<body>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-sm-2"><button type="button" class="btn btn-block btn-primary" onclick="addtmpParam();">添加</button></div>
</div>
<div class="row" style="margin-top:10px;">
<div id="tblServiceList-div" style="width: 100%;">
<table class="table table-bordered" id="interfaceParam">
<thead>
<tr>
<td>序號</td>
<td>名稱</td>
<td>編號</td>
<td>字段類型</td>
<td>默認值</td>
<td>操作</td>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
</body>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script>
function addtmpParam() {
var Table = document.getElementById("interfaceParam");
var rowsNum = Table.rows.length-1;
NewRow = Table.insertRow(); //添加行
ID = NewRow.insertCell(); //添加列
Name = NewRow.insertCell();
NO = NewRow.insertCell();
Type = NewRow.insertCell();
defaultV = NewRow.insertCell();
operate = NewRow.insertCell();
//屬性賦值
ID.innerHTML = rowsNum + 1;
Name.innerHTML = "<input id=Name" + (rowsNum + 1)+" style='width: 80px;' type='text' />";
NO.innerHTML = "<input id=No" + (rowsNum + 1) +" style='width: 80px;' type='text' />";
Type.innerHTML = "<input id=Type" + (rowsNum + 1) +" style='width: 80px;' type='text' />";
defaultV.innerHTML = "<input id=defaultV" + (rowsNum + 1) +" style='width: 80px;' type='text' />";
operate.innerHTML = '<div id=operate' + (rowsNum + 1) + '><a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">保存</a> <a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">取消</a></div>';
}
function saveInterfaceParam() {
var td = event.srcElement; // 通過event.srcElement 獲取激活事件的對象 td
//獲取行索引,修改input樣式,其中parentElement和table中的標簽層級相關,不是一成不變
var key = td.parentElement.parentElement.parentElement.innerText.split("\n")[0].trim();
$("#Name" + key).attr("disabled", true);
$("#No" + key).attr("disabled", true);
$("#Type" + key).attr("disabled", true);
$("#defaultV" + key).attr("disabled", true);
var div1 = $("#operate" + key);
div1[0].innerHTML = '<a style="cursor:pointer;color:#007bff;" onclick="editInterfaceParam()">編輯</a> <a style="cursor:pointer;color:#007bff;" onclick="deleteInterfaceParam()">刪除</a>';
}
function editInterfaceParam() {
var td = event.srcElement; // 通過event.srcElement 獲取激活事件的對象 td
var key = td.parentElement.parentElement.parentElement.innerText.split("\n")[0].trim();
$("#Name" + key).attr("disabled", false);
$("#No" + key).attr("disabled", false);
$("#Type" + key).attr("disabled", false);
$("#defaultV" + key).attr("disabled", false);
var div1 = $("#operate" + key);
div1[0].innerHTML = '<a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">保存</a> <a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">取消</a>';
}
function deleteInterfaceParam() {
var td = event.srcElement; // 通過event.srcElement 獲取激活事件的對象 td
var key = td.parentElement.parentElement.parentNode.rowIndex; //獲取行索引
document.getElementById('interfaceParam').deleteRow(key); //刪除
//以下操作是保存刪除數據后table中序號重新生成且有序
var table = document.getElementById("interfaceParam");
var tableRows = table.rows;
//保存剩余表中數據到RowArr
var RowArr = new Array();
for (var i = 1; i < tableRows.length; i++) {
var arr = new Array();
var tempKey = tableRows[i].cells[0].innerText;
arr.push($("#Name" + tempKey).val());
arr.push($("#No" + tempKey).val());
arr.push($("#Type" + tempKey).val());
arr.push($("#defaultV" + tempKey).val());
RowArr.push(arr);
}
//刪除表中數據
if (table !== "undefined") {
while (table.hasChildNodes()) {
table.removeChild(table.lastChild)
}
}
//重新生成表數據
for (var i = 0; i < RowArr.length+1;i++) {
if (i == 0) {
//生成表頭
NewRow = table.insertRow(); //添加行
ID = NewRow.insertCell(); //添加列
Name = NewRow.insertCell();
NO = NewRow.insertCell();
Type = NewRow.insertCell();
defaultV = NewRow.insertCell();
operate = NewRow.insertCell();
ID.innerHTML = "序號";
Name.innerHTML = "名稱";
NO.innerHTML = "編號";
Type.innerHTML = "字段類型";
defaultV.innerHTML = "默認值";
operate.innerHTML = '操作';
}
else {
//生成表數據
NewRow = table.insertRow(); //添加行
ID = NewRow.insertCell(); //添加列
Name = NewRow.insertCell();
NO = NewRow.insertCell();
Type = NewRow.insertCell();
defaultV = NewRow.insertCell();
operate = NewRow.insertCell();
ID.innerHTML = i;
var rowsNum = i - 1;
Name.innerHTML = "<input id=Name" + (rowsNum + 1) + " style='width: 80px;' type='text' value=" + RowArr[rowsNum][0] + " />";
NO.innerHTML = "<input id=No" + (rowsNum + 1) + " style='width: 80px;' type='text' value=" + RowArr[rowsNum][1] + " />";
Type.innerHTML = "<input id=Type" + (rowsNum + 1) + " style='width: 80px;' type='text' value=" + RowArr[rowsNum][2]+ " />";
defaultV.innerHTML = "<input id=defaultV" + (rowsNum + 1) + " style='width: 80px;' type='text' value=" + RowArr[rowsNum][3] + " />";
operate.innerHTML = '<div id=operate' + (rowsNum + 1) + '><a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">保存</a> <a style="cursor:pointer;color:#007bff;" onclick="saveInterfaceParam();">取消</a></div>';
}
}
}
</script>
</html>

