动态移除新增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
相关产品推荐
相关产品推荐

