前端进阶之旅前端进阶之旅
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
  • 基础篇HTML/CSS/JS 打底
  • 进阶篇原理与工程化
  • 高频篇面试最常问的那批
  • 精选篇按模块收敛的总结
  • 手写篇常考代码手写实现
  • 面经篇真实面试问题复盘
  • AI 篇NEWAI 时代的前端考点
  • 历年面经NEW按年份追踪真实考点
  • 每日一题每天一道,攒手感
  • 专项自测100 题快速查漏
  • 小程序题库小程序专项刷题
  • 算法题库NEW在线编码即时判题
  • 知识卡片NEW碎片时间过考点
  • 面试题大全常见问题解析
  • AI 答疑NEW随时提问,即时解析
  • AI 模拟面试NEW模拟真实面试 + 报告
  • AI 定制路线NEW按你的简历现排
  • AI 知识地图NEW串起全站知识点
  • 原理篇React / Vue 源码拆解
  • HTTP从报文一路讲到 HTTPS
  • 浏览器渲染、事件循环、进程
  • 计算机基础Linux、网络、操作系统
  • 设计模式23 种模式怎么用
  • Node学习指南从环境搭建到服务端
  • NPM工作流script、依赖与发布
  • Docker容器化部署上手
  • Canvas图形与动画实战
  • 前端系统进阶学习大型项目工程化
  • 前端综合文章长期沉淀的实践文
  • 思维导图知识点全景图
  • 学习路线按图索骥不跑偏
  • AI 热点NEWAI 每日动态
  • 公众号动态公众号历史文章
  • 博客动态站长的技术博客
  • 开发者导航常用工具与文档站
首页程序员面试题库removeChild 和 remove() 移除节点区别
浏览浏览器DOM 与文档操作

removeChild 和 parentNode.remove() 方法在移除子节点时有什么不同?

removeChild由父节点调用移除指定子节点并返回它;remove由节点自身调用脱离父节点且无返回值。前者要求节点必须是子节点,否则抛错,后者无父节点时静默不操作。

前端进阶之旅 · 一题精讲更新于 2026.09.05
浏览器#DOM 与文档操作
先看核心答案
理解线索

父节点操作 vs 自身操作

  1. 调用对象父节点调用removeChild,子节点调用remove
  2. 返回值removeChild返回移除的节点,remove返回undefined
  3. 失败行为非子节点时removeChild抛错,remove静默

两者都直接操作DOM树,但不会自动移除事件监听器;若不再需要元素,应置空引用以便垃圾回收。

核心回答

先记住这个答案

removeChild需要先取得父节点,再传入要删除的子节点引用,成功时返回被删除节点;失败比如传入非子节点会抛出NotFoundError。remove则是节点自己调用,会从父节点中移除自身,调用后返回undefined,即使没有父节点也不报错,且作用于Element等ChildNode实现者。

  • removeChild需父节点调用并传子节点
  • remove是子节点自己删除自己
  • removeChild失败抛错,remove静默忽略

底层操作路径与调用约定

removeChild(child)是Node接口方法,由父节点调用并传入子节点,成功后返回该子节点。若child不是当前节点的直接子节点,会抛出NotFoundError;移除后child的parentNode变为null,但child对象本身仍可继续使用,只是不在DOM树中。

Element.remove()来自ChildNode混合接口,调用方是自己,内部逻辑近似于取出自己的parentNode并执行removeChild(this)。若没有父节点则直接返回,不报错。remove的返回值恒为undefined,因此不能像removeChild那样拿回被删节点;从2015年起广泛支持,现代浏览器可放心使用。

任务列表中删除当前项的两种写法

假设一个待办列表,每个li都有删除按钮,点击后需要移除该li。用removeChild需要先找到按钮所在li,再调用li.parentNode.removeChild(li);用remove则直接li.remove()。在按钮事件回调中,后者更简短且无需判断父节点是否存在。

但如果删除逻辑放在管理列表中某模块,外部持有container和将要删除的child,此时用container.removeChild(child)更直观,且能拿到返回节点进行后续数据结构清理;若担心child已被其他逻辑移除,先判断child.parentNode === container再调用removeChild,能避免抛错。

适用边界与失效条件

removeChild要求调用者与子节点存在真实父子关系。如果节点位于Shadow Root或其他文档树中,也必须通过该树内的父节点调用。若子节点刚被移动到其他容器,旧父节点的removeChild调用必定抛错,可通过child.parentNode是否等于当前容器来提前规避。

remove的限制是调用者必须实现ChildNode接口,Element、CharacterData、DocumentType都支持,但Document和DocumentFragment不支持。业务代码中若不关心父节点和返回值,推荐remove;若需要确认删除结果,先用parentNode比较再做removeChild,代价仅是多次属性读取。

回答前,多想一步

容易答错的地方

removeChild 和 remove 在任何情况下都可用
removeChild要求传入的节点必须是调用者的直接子节点,否则抛NotFoundError;remove则要求节点类型实现ChildNode接口,Document节点不能调用remove。二者各有前提,不是无条件替换。
remove() 会返回被移除的节点
remove方法返回undefined,只有removeChild会返回被删除的节点。如果后续需要引用该节点做缓存或转移,应选用removeChild或先从变量保存引用。
试着用自己的话回答

面试官还会怎么问?

remove() 移除后元素还会占用内存吗?

只要还有JavaScript引用,元素仍驻留内存;若所有引用被清空,GC会回收它。与DOM树脱离不影响对象存续,只是不可见不可交互。

想同时移除多个子节点用哪个更好?

两者都一次移除一个节点,多个节点需循环。循环时注意HTMLCollection等实时集合会动态更新,建议倒序遍历或转为数组。若只需清空内容,可用textContent或innerHTML,但这不会自动清除节点上的事件监听器,仍持有引用的旧节点对象会保留监听器;彻底释放需清空引用。

如果子节点不是直接子节点,removeChild抛什么错误?

抛DOMException,name为NotFoundError,因为removeChild只能移除直接子节点,不能删除孙子节点。remove对于非直接子节点调用自己的方法不会检查,只移除自己,不涉及此错误。

从一道题,走向一组知识

把知识连起来

DOM 与文档操作

createElement 和 cloneNode 在创建新节点时有什么实质区别?

同属「DOM 与文档操作」专题,接着看 createElement 和 cloneNode 区别 在具体场景中的处理方式。

DOM 与文档操作

parentNode.children 和 parentNode.childNodes 在遍历子节点时有什么区别?

同属「DOM 与文档操作」专题,接着看 children 和 childNodes 区别 在具体场景中的处理方式。

参考资料

  • Element: remove() method

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 底层操作路径与调用约定
  3. 任务列表中删除当前项的两种写法
  4. 适用边界与失效条件
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑