回答后this question我想知道为什么 removeChild
需要父元素。毕竟,我们可以简单地做
node.parentNode.removeChild(node);
由于父节点应始终直接供 Javascript/DOM 引擎使用,因此并非严格需要提供要删除的节点的父节点。
当然我理解removeChild
是DOM节点方法的原理,但是为什么不存在document.removeNode
之类的东西(仅仅接受任意节点作为参数)?
编辑:更清楚地说,问题是:如果 JS 引擎已经具有要删除的(唯一)节点,为什么它还需要父节点?
最佳答案
我认为它使设计保持简单。一个节点可能是孤立存在的,但更有趣的情况是 DOM 树。对于 removeChild
,要删除的节点必须是调用该方法的节点的子节点。
获取所有子项的列表并针对每个子项进行手动比较并不是一项昂贵的操作。但是,在所有后代中搜索要删除的节点确实很昂贵。
编辑:为了响应您的更新,浏览器只是实现了 DOM spec ,它定义了一个 removeChild
Node
上的方法。 在我看来,规范必须明确且没有假设。它类似于 Dependency Injection从那个 Angular 来看。 DOM Core 规范使用 Node、Element 等构建 block 对树进行建模。在这些构建 block 的某处添加一个单独的方法,例如 removeNode
意味着该方法具有关于其环境的隐式知识 - 它 可能
是某个节点的子节点,如果是的话,应该将其从那里移除。
w3 的任务是制作一个非常健壮的 API,使大多数事情成为可能。他们不应该担心语法糖,因为如果编写得好,语法糖总是可以围绕原生 API 编写。
关于javascript - 为什么 removeChild 需要父节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3422370/