DocumentFragment 節點不屬于文檔樹,繼承的 parentNode 屬性總是 null。
不過它有一種特殊的行為,該行為使得它非常有用,即當請求把一個 DocumentFragment 節點插入文檔樹時,插入的不是 DocumentFragment 自身,而是它的所有子孫節點。這使得 DocumentFragment 成了有用的占位符,暫時存放那些一次插入文檔的節點。它還有利于實現文檔的剪切、復制和粘貼操作
同時我們了解到當需要對頁面DOM進行操作的時候必然會導致多次 重繪、回流(什么是重繪,回流?)。這樣會加大頁面的負擔。影響頁面性能。因此我們可以創建這樣一個臨時占位符。
語法
var docFragment = document.createDocumentFragment();
docFragment是一個對空文檔片段 DocumentFragment
對象的引用。
描述
DocumentFragment
s 是一些DOM節點。它們不是DOM樹的一部分。通常的使用場景是創建一個文檔片段,然后將創建的DOM元素插入到文檔片段中,最后把文檔片段插入到DOM樹中。在DOM樹中,文檔片段會被替換為它所有的子元素。
因為文檔片段存在于內存中,并不在DOM樹中,所以將子元素插入到文檔片段時不會引起頁面回流(reflow)(對元素位置和幾何上的計算)。因此,使用文檔片段document fragments 通常會起到優化性能的作用(better performance)。
例子
var ulList = document.getElementByTagName("ul")[0];
var docfrag = document.createDocumentFragment();
var browserList = ["Internet Explorer", "Mozilla Firefox", "Safari", "Chrome", "Opera"];
browserList.forEach(function(e){
var liDom = document.createElement("li");
liDom .textContent = e;
docfrag.appendChild(liDom );
});
ulDom.appendChild(docfrag);