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

如何移除点击的内联元素当前节点?JS按钮移除函数报错解决

问题描述

我通过JavaScript添加了一个按钮,代码如下:

let newTextArea = "<div class='row mt-4'><div class='col'><button type='button' class='btn btn-light rimuovi' onclick='removeIt()'>Rimuovi</button></div</div>";

点击该按钮时,我想移除它所在的.row元素,于是调用以下函数:

function removeIt(e) {
  e.closest(".row").remove();
}

但运行时出现错误:

Cannot read properties of undefined (reading 'closest') at removeIt

请问如何解决此问题,实现移除点击的内联元素的当前节点?

解决方案

错误核心是调用removeIt()时没有传递事件对象,导致函数内的e为undefined,无法执行closest方法。以下是几种修复方案:

方案一:传递事件对象

修改按钮的onclick属性,显式传入event参数,同时修正HTML字符串里的标签闭合错误:

let newTextArea = "<div class='row mt-4'><div class='col'><button type='button' class='btn btn-light rimuovi' onclick='removeIt(event)'>Rimuovi</button></div></div>";

原函数无需修改,此时e会正确指代点击事件对象。

方案二:通过this获取按钮元素

不依赖事件对象,直接用this指代点击的按钮:

// 修改onclick,传入当前按钮元素
let newTextArea = "<div class='row mt-4'><div class='col'><button type='button' class='btn btn-light rimuovi' onclick='removeIt(this)'>Rimuovi</button></div></div>";

// 调整函数参数为按钮元素
function removeIt(btn) {
  btn.closest(".row").remove();
}

方案三:避免内联事件(推荐)

内联事件不利于代码维护,推荐使用事件绑定或事件委托:

单个按钮绑定事件

// 假设将HTML插入到目标容器
const container = document.getElementById('your-container');
container.insertAdjacentHTML('beforeend', newTextArea);

// 给按钮绑定点击事件
container.querySelector('.rimuovi').addEventListener('click', function() {
  this.closest(".row").remove();
});

多个按钮用事件委托

如果页面会动态添加多个这类按钮,事件委托更高效:

const container = document.getElementById('your-container');
// 给父容器绑定事件,通过事件冒泡判断目标元素
container.addEventListener('click', function(e) {
  if (e.target.classList.contains('rimuovi')) {
    e.target.closest(".row").remove();
  }
});

内容的提问来源于stack exchange,提问作者rob.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 19:25:42