createDocumentFragment() 方法

Posted kikia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了createDocumentFragment() 方法相关的知识,希望对你有一定的参考价值。

//createdocumentfragment()方法创建了一虚拟的节点对象,节点对象包含所有属性和方法。
//当你想提取文档的一部分,改变,增加,或删除某些内容及插入到文档末尾可以使用createDocumentFragment() 方法。
//你也可以使用文档的文档对象来执行这些变化,但要防止文件结构被破坏,createDocumentFragment() 方法可以更安全改变文档的结构及节点。

在更新少量节点的时候可以直接向document.body节点中添加,但是当要向document中添加大量数据是,如果直接添加这些新节点,这个过程非常缓慢,因为每添加一个节点都会调用父节点的appendChild()方法,为了解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片一次性添加到document中。

添加节点常规的写法:

<script type="text/javascript">
window.onload=function(){
for(var i = 0 ; i < 10; i ++) {

var p = document.createElement("p");
var li= document.createTextNode("li");
p.appendChild(li);
document.body.appendChild(p);
}
}
</script>

//这段代码运行是没有问题,但是他调用了十次document.body.appendChild(),每次都要产生一次页面渲染。这时碎片就十分有用了:

<script type="text/javascript">
window.onload=function(){
var body1=document.getElementById("body");
var p = document.createElement("p");
var fragMent=document.createDocumentFragment();
for(var i = 0 ; i < 10; i ++) {
var li= document.createElement("li");
fragMent.appendChild(li);
}
p.appendChild(fragMent);
//body1.appendChild(p);

document.body.appendChild(p);
}

</script>

这段代码中,每个新的<li />元素都被添加到文档碎片中,然后这个碎片被作为参数传递给appendChild()。这里对appendChild()的调用实际上并不是把文档碎片本省追加到body元素中,而是仅仅追加碎片中的子节点,然后可以看到明显的性能提升,document.body.appenChild()一次替代十次,这意味着只需要进行一个内容渲染刷新。

 

http://www.cnblogs.com/yunfour/archive/2011/06/21/2085911.html

以上是关于createDocumentFragment() 方法的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript createDocumentFragment() 方法

使用 createDocumentFragment() 将 Ajax 附加到元素;而不是创建元素

使用 document.createDocumentFragment() 和 innerHTML 来操作 DOM

未捕获的类型错误:无法读取未定义的属性“createDocumentFragment”

jQuery - 无法使用 replaceWith() 函数 - 无法读取未定义的属性“createDocumentFragment”

document.createDocumentFragment