我们可以在文本节点之前插入吗?

时间:2016-05-04 18:45:42

标签: javascript dom

我正在阅读我的应用程序中的代码片段,如:

// Fragment Constructed
fragment = new Object();
fragment.document = document.createElement("div");
fragment.parentNode = node.parentNode; // Remembers the position to re-attach
fragment.nextSibling = node.nextSibling; // Remembers the position to re-attach
fragment.document.appendChild(node);

//Fragment Re-attached
if (fragment.nextSibling && fragment.nextSibling.nodeType !== 3) {
    while (fragment.document.firstChild) {
        fragment.parentNode.insertBefore(fragment.document.firstChild, fragment.nextNode);
    }
} else {
    while (fragment.document.firstChild) {
        fragment.parentNode.appendChild(fragment.document.firstChild);
    }
}

当用户点击YUI面板隐藏按钮时,我们创建一个Object,它具有以下属性 - 面板框的parentNode,nextSibling和附加面板容器的documentFragment对象本身(即上面的片段构造代码)。

当用户取消隐藏YUI面板时,我们会将其重新附加到DOM。 (即上面的Frament Re-attached代码)。

虽然我仍然试图了解它如何实时工作,涵盖所有不同的节点可能性,但我对此代码段有一些疑问。

  1. fragment.document.firstChild总是1,因为我 使用fragment.document.appendChild(node)附加单个节点?
  2. 如果nextSibling存在并且它是textnode,则此代码会转到其他条件,但它实际上是否保留了正确的含义,因为我们现在只是附加到父级而不必担心订单正确?我想这种情况应该被删除,它会正常工作吗?
  3. 算法的复杂性是什么? while(fragment.document.firstChild)?它是O(n),其中n是 子节点的数量,不管它有哪个子节点 - 即 孩子的孩子等。
  4. 这样做有什么好处吗?即我们将它存储在别处并将其带回来。这样做有什么好处吗?
  5. 相关问题:Should I use document.createDocumentFragment or document.createElement

0 个答案:

没有答案