为什么removeChild需要父节点?

Mar*_*pel 13 javascript dom removechild

回答完这个问题后,我想知道为什么removeChild需要一个父元素.毕竟,我们可以做到

node.parentNode.removeChild(node);
Run Code Online (Sandbox Code Playgroud)

由于父节点应始终可直接用于Javascript/DOM引擎,因此不必提供要删除的节点的父节点.

当然我理解removeChild作为DOM节点方法的原理,但为什么不document.removeNode存在这样的东西(只接受任意节点作为参数)?

编辑:更清楚的是,问题是:为什么JS引擎根本就需要父节点,如果它已经有要删除的(唯一)节点?

Anu*_*rag 7

我认为它使设计简单.节点可以独立存在,但更有趣的情况是DOM树.使用时removeChild,要删除的节点必须是调用该方法的节点的子节点.

获取所有孩子的列表并对每个孩子进行手动比较并不是那么昂贵的操作.但是,在所有后代中搜索要删除的节点确实很昂贵.

编辑:为了响应您的更新,浏览器只是实现DOM规范,该规范定义了一个removeChild方法Node.在我看来,规范必须是明确的,没有假设.从这个角度来看,它类似于依赖注入.DOM Core规范使用诸如Node,Element等构建块对树进行建模.removeNode在这些构建块中的某处添加单独的方法意味着该方法具有关于其环境的隐式知识 - 它may是某个节点的子节点,并且它应该从那里删除,如果是的话.

w3的任务是创建一个非常强大的API,使大多数事情成为可能.他们不应该担心语法糖,因为如果写得很好,它们总是可以写在原生API上.