什么是“out of DOM”元素?

时间:2015-07-05 04:03:00

标签: javascript html dom

我对DOM节点感到有点困惑,主要是条款。

以前我认为DOM是我在检查员中看到的,仅此而已。没什么。现在我知道诸如file_put_contents("OUT",json_encode($jsonStr)); 之类的函数创建了将我的文档作为“上下文”的DOM节点,但没有将文档作为“父”。 document.createElement()是否“创建了DOM节点”?

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

为了进一步增加混淆,有一些新概念,如保留路径,分离的DOM节点,挂起的DOM节点,影子DOM,文档片段等。

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

1 个答案:

答案 0 :(得分:5)

  

“DOM节点之外”这个术语不是用词不当吗?

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

因此,它可以存在于任何地方并且仍然是一个节点。如果发动机与汽车分离,它仍然是发动机。它只是放在“正确”的地方才有用。

  

根据我的理解,“节点”与“DOM节点”或“HTML元素”同义。

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

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

  

当节点是DOM中的东西时,调用“DOM节点外”的东西是不是很糟糕?这个词似乎是自相矛盾的。

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

  

为了进一步增加混淆,有一些新概念,如保留路径

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

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

  

分离的DOM节点,挂起DOM节点

“超出DOM节点”和“分离的DOM节点”将是相同的事情,我猜测“悬挂DOM节点”虽然我从来没有听说过使用过。它们似乎都暗示已从DOM中删除但仍通过JavaScript保留在内存中的节点。

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

  

影子DOM,文档片段等

这些在HTML DOM规范中有明确规定。一个快速的答案是Shadow DOM再次是一个JavaScript的东西,它是关于为您的元素提供受保护的范围以及将内容与渲染分离。似乎令人困惑?那是因为这本身就是一个全新的问题,你真的应该阅读它。

一些可以帮助您入门的链接:

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/