document.createDocumentFragment()的作用是什么

document.createDocumentFragment()的作用是什么:
createDocumentFragment()函数可能用的并不是太多,之所以这样是因为不使用此方法完全可以实现所有的功能,但是如果能够妥当的使用此函数可以有效的提高执行效果,下面就通过实例简单介绍一下次函数用法。
先看一段代码实例:

var myArray=new Array("一","二","三","四","五","六");
window.onload=function()
{
  for(var i=0;i<6;i++)
  {
    var odiv=document.createElement("div");
    var theText=document.createTextNode("蚂蚁部落"+myArray[i]);
    odiv.appendChild(theText);
    document.body.appendChild(odiv);
  }
}

以上代码可以依次输出"蚂蚁部落X"。怎么实现的非常简单,这里就不多说。其实上面的代码在执行效率方面还有提高的余地,因为每调用document.body.appendChild()都会渲染一次页面,执行效率自然就会降低,这个时候createDocumentFragment()函数的作用就会得到体现了,代码修改如下:

var myArray=new Array("一","二","三","四","五","六");
var myFragment=document.createDocumentFragment();
window.onload=function()
{
  for(var i=0;i<6;i++)
  {
    var odiv=document.createElement("div");
    var theText=document.createTextNode("蚂蚁部落"+myArray[i]);
    odiv.appendChild(theText);
    myFragment.appendChild(odiv);
    document.body.appendChild(myFragment)
  }
}

以上代码使用实现了同样的功能,不过页面只渲染一次就可以了,执行效果当然就高了。
createDocumentFragment()函数:
此函数可以创建一个文档碎片节点。但是此函数创建的节点在文档中没有对应的标记,也就无法在页面中进行渲染,但总归是个节点,具有一般节点所具有特性,例如可以使用appendChild()等方法。
上面的代码实例说明使用此方法可以减少渲染次数,其实这个要分情况的,如果目标节点已经在文档中存在的情况下,使用此方法可以提高效率,如果目标节点在文档中不存在,需要动态创建的话,然后再进行添加同样也只是渲染一次,代码实例如下:

var myArray=new Array("一","二","三","四","五","六");
var fatherDiv=document.createElement("div");
window.onload=function()
{
  for(var i=0;i<6;i++)
  {
    var odiv=document.createElement("div");
    var theText=document.createTextNode("蚂蚁部落"+myArray[i]);
    odiv.appendChild(theText);
    fatherDiv.appendChild(odiv);
    document.body.appendChild(fatherDiv)
  }
}

以上代码中,没有使用createDocumentFragment()函数同样只渲染一次。
所以说要理解在何种场景下使用才能够提高效率,而不是死记硬背。

原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=8439

更多内容可以参阅:http://www.softwhy.com/javascript/

时间: 2024-08-26 03:02:16

document.createDocumentFragment()的作用是什么的相关文章

浅析document.createDocumentFragment()与js效率

对于循环批量操作页面的DOM有很大帮助!利用文档碎片处理,然后一次性append,并且使用原生的javascript语句操作 document.createDocumentFragment()说白了就是为了节约使用DOM.每次JavaScript对DOM的操作都会 改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间.为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次 性添加到document中. 这是我写的一个简单的测试页面: <!DOCTYPE htm

document.createDocumentFragment()的用法

createDocumentFragment有什么作用呢? 调用多次document.body.append(),每次都要刷新页面一次.效率也就大打折扣了,而使用document_createDocumentFragment()创建一个文档碎片,把所有的新结点附加在其上,然后把文档碎片的内容一次性添加到document中,这也就只需要一次页面刷新就可. 他支持以下DOM2方法: a, cloneNode, hasAttributes, hasChildNodes, insertBefore, n

document.createDocumentFragment

document.createElement和document.createDocumentFagment在功能实现上没有什么差别 都是用来新创建一个DOM, 但是区别在于,前者每次都新建一个,每次页面刷新一次 而后者,是先创建一个文档碎片,将所有后面新创建的节点创建完毕后一次加载到页面中, 这样可以减少页面刷新次数,提高渲染效率.

document的createDocumentFragment()方法

在更新少量节点的时候可以直接向document.body节点中添加,但是当要向document中添加大量数据是,如果直接添加这些新节点,这个过程非常缓慢,因为每添加一个节点都会调用父节点的appendChild()方法,为了解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片一次性添加到document中. 假如想创建十个段落,使用常规的方式可能会写出这样的代码: 1 2 3 4 5 6 for(var i = 0 ; i < 10; i ++) {     var p =

jQuery.buildFragment源码分析以及在构造jQuery对象的作用

这个方法在jQuery源码中比较靠后的位置出现,主要用于两处.1是构造jQuery对象的时候使用 2.是为DOM操作提供底层支持,这也就是为什么先学习它的原因.之前的随笔已经分析过jQuery的构造函数了,也提到了有12个分支,其中有一个分支就是通过jQuery.buildFragment方法来处理的,什么情况呢?就是在处理复杂html标签的时候,例如$('<div>123</div>')这样的形式,在构造函数内部通过ret变量判断是不是简单标签,如果是就调用js的createEl

document文档碎片

var arrText = ["1","2","3","4","5","6","7","8","9","10"]; var oFragment = document.createDocumentFragment(); for(var i=0;i<arrText.length;i++) { var oP

Document节点

原文地址:https://wangdoc.com/javascript/ 概述 document对象. window.document属性就指向这个对象.只要浏览器开始载入HTML文档,该对象就存在了,可以直接使用. document对象有不同的办法可以获取. 正常的网页,直接使用document或window.document iframe框架里面的网页,使用iframe节点的contentDocument属性. Ajax操作返回的文档,使用XMLHttpRequest对象的responseX

javascript:Document 节点

Document 节点 概述 document节点对象代表整个文档,每张网页都有自己的document对象.window.document属性就指向这个对象.只要浏览器开始载入 HTML 文档,该对象就存在了,可以直接使用. document对象有不同的办法可以获取. 正常的网页,直接使用document或window.document. iframe框架里面的网页,使用iframe节点的contentDocument属性. Ajax 操作返回的文档,使用XMLHttpRequest对象的res

Document Object Model

1. DOM => Document Object Model(文档对象模型); DOM是一个树形结构;由Node\Element(节点\元素)构成;2.Node\Element; element.id\element.className\element.value\.... element.tagName\element.nodeName => 元素的标签名; element.nodeType; => 元素的类型; Element(1); => 元素; Attbribute(2)