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

JS调用removeChild报参数非Node类型错误,排除选字符串问题如何解决?

报错原因排查及修复方案

核心错误原因

你传入removeChild、appendChild方法的参数确实是字符串类型,不符合这两个方法要求传入DOM Node节点对象的规则,和你查到的通用报错原因是匹配的:

  • 你代码中chosen = e.target.id这行,id属性返回的是元素id对应的字符串,不是DOM节点本身
  • 你此前把chosen声明为空字符串的调整是错误方向,chosen需要存储的是DOM节点对象,而非字符串

另外你现有代码还存在一个笔误:discs.forEach(choices => choice.addEventListener(...) 里循环参数名是choices,实际调用的时候写成了choice,参数不匹配也会导致事件绑定失效。

修复后的可运行代码

const container = document.querySelector(".container")
const towerOne = document.querySelector("#towerOne")
const discs = document.querySelectorAll(".disc")

let chosen

// 修正参数名不一致问题
discs.forEach(choice => choice.addEventListener("click", (e) => {
    // 直接存储点击的DOM节点,而非id字符串
    chosen = e.target
    towerOne.removeChild(chosen)
    container.appendChild(chosen)
}))

可选优化

如果存在disc节点不在towerOne中的场景,可以加一层父节点判断,避免移除非子节点时报错:

discs.forEach(choice => choice.addEventListener("click", (e) => {
    chosen = e.target
    if (chosen.parentElement === towerOne) {
      towerOne.removeChild(chosen)
      container.appendChild(chosen)
    }
}))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:36:02