javascript - 什么是 "out of DOM"元素?

标签 javascript html dom

我对 DOM 节点有点困惑,主要是术语。

以前我认为 DOM 就是我在检查器中看到的,仅此而已。现在我知道诸如 document.createElement() 之类的函数可以创建 DOM 节点,这些节点将我的文档作为“上下文”,但不将文档作为“父”。 document.createElement() 是否创建“DOM 节点之外”?

这个词不是用词不当吗?根据我的理解,“节点”是“DOM 节点”或“HTML 元素”的同义词。当节点是 DOM 中的东西时,将某物称为“DOM 节点之外的节点”是不是不好命名?这个词似乎自相矛盾。

为了增加更多的困惑,还有一些新概念,如保留路径、分离的 DOM 节点、悬挂的 DOM 节点、影子 DOM、文档片段等。

这些术语中哪些是同义词?哪些是用词不当?哪些是实际规范(链接到规范的奖励)。

最佳答案

And isn't the term "out of DOM nodes" a misnomer?

没有。首先,当谈论关于 HTML 的“DOM”时,它指的是 HTML DOM。 A node can exist in the HTML DOM or not .节点(在我们现在谈论的意义上)只是可以构成或成为 DOM 一部分的最小的自包含部分。

因此,它可以存在于任何地方并且仍然是一个节点。如果发动机与汽车分离,它仍然是发动机。除非将其放在“正确”的位置,否则它不会非常有用。

A "node" is synonymous with a "DOM node" or "HTML Element", per my understanding.

一个节点可以被添加到 HTML DOM 并且它 CAN be a HTML Element , 但它 doesn't have to be .例如,在 HTML 中,文本节点也是一个节点。并且节点可以存在于 HTML 文档或 XML 文档或 RSS 文档或...

或者它可以是一个节点,它是一个 HTML 元素,但存在于 HTML DOM 之外,例如仅存在于内存中。动态创建节点时就是这种情况。

Isn't it bad naming to call something an "out of DOM node", when nodes are things in a DOM? The term seems self contradicting.

根据以上所述,不,不是。引擎仍然是引擎,节点仍然是节点。

To add further confusion, there are new concepts like retaining paths

“保留路径”与 DOM 无关,而与 JavaScript 有关。这意味着只要在任何地方仍有对变量/对象的引用,该对象就不会被垃圾回收。一旦“使用”该对象的所有方法/函数/DOM 元素都被垃圾回收,该对象也是如此。

它基本上只是关于垃圾收集/内存泄漏。它只涉及 DOM,因为 DOM 中的所有内容都在“使用”并且应该保留。

detached DOM nodes, hanging DOM nodes

“超出 DOM 节点”和“分离的 DOM 节点”是一回事,我猜是“悬挂的 DOM 节点”,尽管我从未听说过有人使用过。它们似乎都暗示节点已从 DOM 中移除,但仍通过 JavaScript 保留在内存中。

这些概念并不新鲜,JavaScript 已经这样做了很长时间。如果它们看起来很新,那是因为人们更多地谈论它们。

shadow DOM, document fragments, etc

这些在 HTML DOM 规范中有明确规定。一个快速的回答是 Shadow DOM 又是一个 JavaScript 东西,它是关于给你的元素一个 protected 范围以及将内容与渲染分开。看起来很困惑?这是因为这本身就是一个全新的问题,您真的应该仔细阅读。

一些帮助您入门的链接:

http://www.w3.org/DOM/
http://www.w3.org/TR/dom/
http://w3c.github.io/webcomponents/spec/shadow/
http://www.w3.org/TR/2014/REC-html5-20141028/

关于javascript - 什么是 "out of DOM"元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31227026/

相关文章:

html - Bootstrap 背景色

javascript - DOM 渲染是异步发生的吗?

python - 如何对 OOo/LibreOffice Writer 文档进行简单操作,然后保存

javascript - 减轻 Electron 应用程序的重量

javascript - 如何执行从ajax响应返回的javascript函数

javascript - React 应用程序没有按预期触发 onScroll 事件

html - Bootstrap : order elements with the 'navbar-right' class

html - 如何选择 CSS 中第一次出现的没有特定类的 HTML 元素?

c# - 如何向WebBrowser 提供控件并操纵HTML 文件?

javascript - JQuery 复制/追加元素,已删除基础对象