document.createElement()和document.createDocumentFragment()的比较
我在上一篇文章js中DOM操作复习总结中提到了:document.createElement()和document.createDocumentFragment(),虽说我们平时可以把两者混着用,但是还是得明白两者之间的区别:
一.在DOM操作中document.createElement()每次创建的都是一个DOM节点,所以每次都要执行把节点添加到document.body(或其后的节点)中的操作,这样对于一个小程序运行时没有问题的,但如果他调用了十次甚至一百次一千次document.body.appendChild(),每次都要产生一次页面刷新,这样就会产生很多页面碎片,而此时就体现出了document.createDocumentFragment()的重要性。
document.createDocumentFragment()是创建一个文档片段,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中,这样不管要添加多少个节点都只需要最后添加的时候调用一次,这意味着只需要进行一次页面的刷新,需要的时间显然会比前面的要少。
eg:第一段代码用document.createElement()来实现,如下:
for(var i = 0 ; i < 10; i ++) {
var p = document.createElement("p");
var oTxt = document.createTextNode("段落" + i);
p.appendChild(oTxt);
document.body.appendChild(p);
}
第二段代码用document.createDocumentFragment()来实现,如下:
var oFragment = document.createDocumentFragment();
for(var i = 0 ; i < 10; i ++) {
var p = document.createElement("p");
var oTxt = document.createTextNode("段落" + i);
p.appendChild(oTxt);
oFragment.appendChild(p);
}
document.body.appendChild(oFragment);
很明显可以验证第二种方法比第一种方法节省时间
二.reateElement创建的元素可以使用innerHTML,createDocumentFragment创建的元素使用innerHTML并不能达到预期修改文档内容的效果,只是作为一个属性而已。两者的节点类型完全不同,并且createDocumentFragment创建的元素在文档中没有对应的标记,因此在页面上只能用js中访问到
三.另一个最主要的区别就是createElement创建的元素可以重复操作,添加之后就算从文档里面移除依旧归文档所有,可以继续操作,但是createDocumentFragment创建的元素是一次性的,添加之后再就不能操作了(说明:这里的添加并不是添加了新创建的片段,因为上面说过,新创建的片段在文档内是没有对应的标签的,这里添加的是片段的所有子节点)。
最后更新:2017-04-01 18:10:12
上一篇:
Greenplum介绍
下一篇:
document.createElement()和document.createDocumentFragment()的比较
《C++多线程编程实战》——2.9 在用户空间实现线程
自然语言处理的6大法宝
Datagrid加载和提交时候自动出现BusyIndicator并绑定
连载:面向对象葵花宝典:思想、技巧与实践(31) - OCP原则
jdk1.5新特性4之自动装箱和自动拆箱与享元模式
网络子系统83_inet协议族-SOCK_RAW(四)
java 六种异常处理的陋习
香港服务器租用:应警惕低价国际带宽
深入Objective-C Runtime机制(一):类和对象的实现
sendBroadcastAsUser——Calling a method in the system process without a qualified user