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

如何在JavaScript动态表格中实现逐行删除功能?

解决逐行删除日程表行的问题

问题根源

你的代码未为新增行的删除按钮绑定删除逻辑,且表单内的独立删除按钮无明确功能,导致出现误删所有行的情况。要实现逐行删除,需为每行的删除按钮添加对应事件,触发删除当前行的操作。

修改方案

我们可以通过两种方式实现:在创建行时直接为删除按钮绑定事件,或是用事件委托适配动态生成的元素。以下是完整的修改代码:

修改后的JavaScript代码

var tituloPag = document.getElementById("titulo");

tituloPag.addEventListener("click", function() {
  tituloPag.textContent = "Bem vindo a sua agenda";
});

var botaoAdd = document.getElementById("adicionar-contato");
botaoAdd.addEventListener("click", addContato);

function addContato(event) {
  event.preventDefault();

  var contatoTr = document.createElement("tr");
  var formContato = document.getElementById("formulario");

  var nomeTd = document.createElement("td");
  var emailTd = document.createElement("td");
  var celularTd = document.createElement("td");
  var instaTd = document.createElement("td");
  var faceTd = document.createElement("td");
  var excluirTd = document.createElement("td");

  nomeTd.textContent = formContato.nome.value;
  emailTd.textContent = formContato.email.value;
  celularTd.textContent = formContato.cel.value;
  instaTd.textContent = formContato.insta.value;
  faceTd.textContent = formContato.face.value;
  excluirTd.innerHTML = "<button class='btn btn-danger excluir'><i class='fa fa-trash-o'>Excluir</i></button>";

  // 方式1:直接为当前行的删除按钮绑定删除事件
  excluirTd.querySelector('.excluir').addEventListener('click', function() {
    contatoTr.remove();
  });

  contatoTr.appendChild(nomeTd);
  contatoTr.appendChild(emailTd);
  contatoTr.appendChild(celularTd);
  contatoTr.appendChild(instaTd);
  contatoTr.appendChild(faceTd);
  contatoTr.appendChild(excluirTd);

  var agendaTabela = document.getElementById("corpoAgenda");
  agendaTabela.appendChild(contatoTr);

  // 可选:添加后清空表单输入框
  formContato.reset();
}

// 方式2:事件委托(适合大量动态生成行的场景,可替换方式1)
// document.getElementById('corpoAgenda').addEventListener('click', function(e) {
//   const deleteBtn = e.target.closest('.excluir');
//   if (deleteBtn) {
//     deleteBtn.closest('tr').remove();
//   }
// });

修改后的HTML代码(移除混淆性按钮)

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>

<div class="p-5 text-black text-center bg-roxo">
  <h1 id="titulo">João Augusto</h1>
</div>

<div class="container mt-5">
  <div class="container">
    <h5>Agenda</h5>
    <form id="formulario">
      <div class="row py-2">
        <div class="col-1">
          <label for="nome">Nome:</label>
        </div>
        <div class="col-5 ">
          <input type="text" class="form-control" placeholder="Escrava o primeiro nome" name="nome">
        </div>
      </div>

      <div class="row py-2">
        <div class="col-1">
          <label for="email">Email:</label>
        </div>
        <div class="col-5">
          <input type="text" class="form-control" placeholder="email" name="email">
        </div>
        <div class="col-1">
          <label for="cel">Celular:</label>
        </div>
        <div class="col-5">
          <input type="text" class="form-control" placeholder="(XX)XXXX-XXXX" name="cel">
        </div>
      </div>

      <div class="row py-2">
        <div class="col-1">
          <label for="insta">Instagram:</label>
        </div>
        <div class="col">
          <input type="text" class="form-control" placeholder="Instagram" name="insta">
        </div>
        <div class="col-1">
          <label for="face">Facebook:</label>
        </div>
        <div class="col">
          <input type="text" class="form-control" placeholder="Facebook" name="face">
        </div>
      </div>

      <div class="salvarexcluir">
        <button type="button" class="btn btn-info" id="adicionar-contato">Salvar</button>
        <!-- 移除表单内多余的删除按钮,避免误操作 -->
      </div>
    </form>
  </div>

  <div class="container mt-3">
    <table class="table table-striped" id="myTable">
      <thead>
        <tr>
          <th>Nome</th>
          <th>Email</th>
          <th>Celular</th>
          <th>Instagram</th>
          <th>Facebook</th>
          <th>Excluir</th>
        </tr>
      </thead>
      <tbody id="corpoAgenda">
      </tbody>
    </table>
  </div>
</div>

<div class="mt-5 p-4 bg-dark text-white text-center">
</div>

关键说明

  1. 直接绑定事件:在创建每行的删除按钮时,立即为其添加点击事件,触发后移除当前行,逻辑直观简单。
  2. 事件委托:将点击事件绑定到表格tbody父元素,通过判断点击目标定位到删除按钮,再删除对应行,适合大量动态生成行的场景,性能更优。
  3. 移除冗余按钮:表单内的独立删除按钮无对应逻辑,易引发误操作,因此建议移除;若需清空所有行的功能,可单独为其添加清空tbody的事件。

内容的提问来源于stack exchange,提问作者JOÃO AUGUSTO VENANCIO DA SILVA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 19:45:31