我正在阅读我的应用程序中的代码片段,如:
// 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代码)。
虽然我仍然试图了解它如何实时工作,涵盖所有不同的节点可能性,但我对此代码段有一些疑问。
fragment.document.firstChild
总是1,因为我
使用fragment.document.appendChild(node)
附加单个节点?nextSibling
存在并且它是textnode
,则此代码会转到其他条件,但它实际上是否保留了正确的含义,因为我们现在只是附加到父级而不必担心订单正确?我想这种情况应该被删除,它会正常工作吗?while(fragment.document.firstChild)
?它是O(n),其中n是
子节点的数量,不管它有哪个子节点 - 即
孩子的孩子等。相关问题:Should I use document.createDocumentFragment or document.createElement