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

动态移除新增DOM列时出现removeChild执行失败错误的排查求助

动态移除新增DOM列时出现removeChild执行失败错误的排查求助

我正在开发一款需要按需添加、移除项目的应用,对应的UI如下(原提问附带了UI截图,此处暂无法展示):

工作流程

  • 点击添加图标时,会新增一个可用于分配的列;点击标记为"x"的删除图标时,会从列表中移除一列。
  • 从表面功能来看,列确实能正常被添加和移除。

问题

当通过点击添加按钮新增一列后,尝试删除这列时控制台会抛出错误。举个具体场景:默认页面有2列,点击添加按钮新增第3列,此时尝试删除这新增的第3列就会触发错误。

错误信息

Logic.js:238 Uncaught DOMException: Failed to execute 'removeChild' on 'Node': The node to be removed is not a child of this node.
at HTMLElement.

相关代码

辅助函数:获取DOM元素

/**
* helper function to retrieve DOM elements
* @param {any} elem
* @returns
*/
const getElements = (elem) => {
  const deleteBtns = Array.from(elem.getElementsByClassName("delete-btn"));
  const permissions = elem.getElementsByClassName("permissions-row") || elem
  const elements = {
    row: permissions,
    button: deleteBtns
  }
  return elements;
}

添加列的函数

/*** Creates new permissions for the permission edit modal ****/
const addColumns = (elem) => {
  elem.querySelector(".add-permission").addEventListener("click", () => {
    const permsRow = getElements(elem).row
    const col = elem.querySelector(".col-6").cloneNode(true)
    console.log(permsRow[0])
    permsRow[0].appendChild(col);
    deleteColumns(permsRow[0])
  } )
}

删除列的函数

/**
*  Deletes permissions from the permissions edit modal
*/
const deleteColumns = (elem) => {
  const deleteBtns = getElements(elem).button;
  const permissions = getElements(elem).row;
  deleteBtns.forEach(btn => {
    btn.addEventListener("click", (event) => {
      updatePermissions(elem);
      const currentPermission = event.target.parentNode.parentNode
      Swal.fire({
        icon: 'question',
        title: 'Delete',
        text: 'Do you want to delete this permission?!',
      })
      console.log(permissions);
      if (deleteBtns.length === 1) return;
      if (permissions.length === 0) {
        console.log(deleteBtns.length)
        elem.removeChild(currentPermission)
      } else {
        permissions[0].removeChild(currentPermission);
      }
    })
  })
}

我尝试过的解决方法

  • 解析克隆出来的节点
  • 通过辅助函数获取DOM元素
    但这些方法都没能解决问题。

希望能得到各位关于这个错误原因的见解,非常感谢!

备注:内容来源于stack exchange,提问作者Seyi Agboola

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 08:38:15