javascript - 为什么 removeChild 需要父节点?

标签 javascript dom removechild

回答后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/

相关文章:

javascript - 我可以写一个无限柯里化(Currying)的函数吗?

javascript - 如何通过 JavaScript 或 jQuery 修改 URL

javascript - 如何在 Angular2 中将组件的 html 设置为 iframe

javascript - 如何将 DOM 元素脚本添加到 head 部分?

javascript在无限制上传按钮上删除文件

javascript - 如何为动态添加的元素初始化 JQuery 插件

javascript - HTML 中是否允许 <head> 和 <body> 之外的 &lt;script&gt; 标记?

javascript - 使用 Javascript 删除 DOM 元素

javascript - 删除除第一个之外的所有子节点

javascript - 如何在维护 DRY 代码的同时运行依赖于 js 事件的 coffeescript 方法?