You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JavaScript实现表格数据的删除与更新功能

嘿,我来帮你搞定删除和编辑用户的功能!先梳理下原代码里的几个小问题,再一步步实现需求:

首先,你原来的cityArray是把用户的每个属性单独push进去,这样数组变成了扁平的列表,不好对应到单个用户。咱们先把数组改成存储完整的用户对象,这样后续删除和编辑才好操作。


1. 修正数组存储逻辑

在add函数里,把原来循环push每个属性的代码,改成直接push整个user对象:

// 原代码(不推荐):
// for(var key in user) {
//   cityArray.push(user[key]);
// }
// 改成:
cityArray.push(user);

2. 实现删除函数

首先修改Delete按钮的点击事件,把当前按钮元素传进去,这样能精准找到对应的行:

cell3.innerHTML="<input type='submit' value='Delete' onclick='deleteRow(this)'>";

然后实现deleteRow函数,同时删除表格行和数组里的对应用户对象:

function deleteRow(btn) {
  // 获取当前按钮所在的行
  const row = btn.parentNode.parentNode;
  // 计算数组中的索引(减去表头行的索引0)
  const index = row.rowIndex - 1;
  // 从表格中移除行
  row.parentNode.removeChild(row);
  // 从数组中删除对应的用户数据
  cityArray.splice(index, 1);
}

3. 实现编辑更新功能

咱们需要完成这几件事:点击Update按钮时把用户信息填充到输入框,切换Add按钮为Save模式,点击Save后同步更新数组和表格内容。

首先修改Update按钮的点击事件,传递当前按钮元素:

cell4.innerHTML="<input type='submit' value='Update' onclick='edit(this)'>";

然后添加全局变量记录编辑状态,再实现edit和saveEdit函数:

// 全局变量:记录当前正在编辑的行在数组中的索引
let editIndex = -1;

function edit(btn) {
  const row = btn.parentNode.parentNode;
  editIndex = row.rowIndex - 1;
  // 获取当前要编辑的用户数据
  const user = cityArray[editIndex];
  // 把数据填充到输入框
  document.getElementById("sname").value = user.Name;
  document.getElementById("sage").value = user.Age;
  document.getElementById("semail").value = user.Email;
  // 把Add按钮切换成Save按钮
  const addBtn = document.querySelector("button[onclick='add()']");
  addBtn.innerHTML = "Save";
  addBtn.setAttribute("onclick", "saveEdit()");
}

function saveEdit() {
  if (editIndex === -1) return; // 没有编辑状态时直接退出
  // 获取输入框的新值
  const name = document.getElementById("sname").value;
  const age = document.getElementById("sage").value;
  const email = document.getElementById("semail").value;
  // 更新数组中的用户数据
  cityArray[editIndex] = { Name: name, Age: age, Email: email };
  // 更新表格中的内容
  const row = document.getElementById("table").rows[editIndex + 1]; // +1是因为表头行是索引0
  row.cells[0].innerHTML = name;
  row.cells[1].innerHTML = age;
  row.cells[2].innerHTML = email;
  // 重置输入框和按钮状态
  document.getElementById("sname").value = "";
  document.getElementById("sage").value = "";
  document.getElementById("semail").value = "";
  const saveBtn = document.querySelector("button[onclick='saveEdit()']");
  saveBtn.innerHTML = "Add";
  saveBtn.setAttribute("onclick", "add()");
  editIndex = -1;
}

完整整合代码

把所有改动整合后的完整代码如下(还去掉了原代码里多余的空行,添加了操作后清空输入框的逻辑):

<div align="center"> 
  <h1>User Form</h1> 
  <hr> 
  <label>User Name:</label> 
  <input type="text" id="sname" /><br><br> 
  <label>User Age:</label> 
  <input type="text" id="sage" /><br><br> 
  <label>User Email:</label> 
  <input type="text" id="semail" /><br><br> 
  <button onclick="add()">Add</button> 
</div> 
<br><br> 
<table align="center" width="1000px" border="2px" id="table"> 
  <tr> 
    <th>Name</th> 
    <th>Age</th> 
    <th>Email</th> 
    <th>Delete</th> 
    <th>Update</th> 
  </tr> 
</table> 
<script type="text/javascript"> 
var cityArray = [];
let editIndex = -1; // 记录当前编辑的索引

// 添加用户函数
function add() { 
  var inputName = document.getElementById("sname"); 
  var inputAge = document.getElementById("sage"); 
  var inputEmail = document.getElementById("semail"); 
  var user={ 
    Name:inputName.value, 
    Email:inputEmail.value, 
    Age:inputAge.value 
  };
  // 存储完整用户对象
  cityArray.push(user); 
  console.log(cityArray); 
  var table=document.getElementById('table'); 
  var row=table.insertRow(); 
  var cell0=row.insertCell(0); 
  var cell1=row.insertCell(1); 
  var cell2=row.insertCell(2); 
  var cell3=row.insertCell(3); 
  var cell4=row.insertCell(4); 
  cell0.innerHTML=user.Name; 
  cell1.innerHTML=user.Age; 
  cell2.innerHTML=user.Email; 
  cell3.innerHTML="<input type='submit' value='Delete' onclick='deleteRow(this)'>"; 
  cell4.innerHTML="<input type='submit' value='Update' onclick='edit(this)'>"; 
  // 清空输入框
  inputName.value = "";
  inputAge.value = "";
  inputEmail.value = "";
} 

// 删除用户函数
function deleteRow(btn) {
  const row = btn.parentNode.parentNode;
  const index = row.rowIndex - 1;
  row.parentNode.removeChild(row);
  cityArray.splice(index, 1);
}

// 进入编辑状态函数
function edit(btn) {
  const row = btn.parentNode.parentNode;
  editIndex = row.rowIndex - 1;
  const user = cityArray[editIndex];
  document.getElementById("sname").value = user.Name;
  document.getElementById("sage").value = user.Age;
  document.getElementById("semail").value = user.Email;
  // 切换按钮为Save模式
  const addBtn = document.querySelector("button[onclick='add()']");
  addBtn.innerHTML = "Save";
  addBtn.setAttribute("onclick", "saveEdit()");
}

// 保存编辑内容函数
function saveEdit() {
  if (editIndex === -1) return;
  const name = document.getElementById("sname").value;
  const age = document.getElementById("sage").value;
  const email = document.getElementById("semail").value;
  // 更新数组数据
  cityArray[editIndex] = { Name: name, Age: age, Email: email };
  // 更新表格显示
  const row = document.getElementById("table").rows[editIndex + 1];
  row.cells[0].innerHTML = name;
  row.cells[1].innerHTML = age;
  row.cells[2].innerHTML = email;
  // 重置状态
  document.getElementById("sname").value = "";
  document.getElementById("sage").value = "";
  document.getElementById("semail").value = "";
  const saveBtn = document.querySelector("button[onclick='saveEdit()']");
  saveBtn.innerHTML = "Add";
  saveBtn.setAttribute("onclick", "add()");
  editIndex = -1;
}
</script>

内容的提问来源于stack exchange,提问作者fahad ali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:08:36