理解 DocumentFragment

含义:创建文档片段,它继承了Node的所有方法,对DOM操作性能非常好。
创建文档片段 如下方法:

var frag = document.createDocumentFragment();

文档片段有三个node属性,nodeType, nodeName, nodeValue; 他们的值分别是 11, ‘#document-fragment‘, null, 文档片段节点没有父节点parentNode. 如下代码演示:

var frag = document.createDocumentFragment();
 console.log(frag.nodeType);  // 11
 console.log(frag.nodeValue); // null
 console.log(frag.nodeName);  // #document-fragment
 console.log(frag.parentNode); // null

它有什么作用呢?
我们经常使用js来操作DOM操作,比如向页面中插入元素,每次插入元素的时候,浏览器会发生重绘,都需要重新渲染页面,如果做大量的这样的操作,非常影响性能的,影响用户体验。
比如如下代码:

var ul = document.getElementById("ulId");
for (var i = 0; i < 30; i++) {
   var li = document.createElement(‘li‘);
   li.innerHTML = "aaa" + i;
   ul.appendChild(li)
 }

我们知道每一次插入都会引起重新渲染(计算元素的尺寸,显示内容等),会重新重绘页面,因此会影响性能的,我们最常见还有一种方法是将创建的元素写到一个字符串上,然后一次性写到innerHTML上,这种使用浏览器对innerHTML的解析比上面多次插入快很多,但是构造字符串灵活性比较差,很难符合创建各种各样的DOM元素。如下代码:

var ul = document.getElementById("ulId");
var ihtml = ‘‘;
for (var i = 0; i < 30; i++) {
  ihtml += ‘<li>‘+i+‘</li>‘;
}
ul.innerHTML = ihtml;

但是使用DocumentFragment,可以弥补上面两种方法的不足。
DocumentFragment是没有父节点的最小文档对象,常用于存储html和xml文档,它继承了Node,因此它有Node的所有属性和方法,完全可以操作Node那样操作DocumentFragment.

DocumentFragment文档片段是存在于内存中的,没有在DOM中,所以将子元素插入到文档片段中不会引起页面回流,因此使用DocumentFragment可以起到性能优化作用。
比如上面插入的代码可以改成如下:

<!DOCTYPE html>
 <html>
  <head>
    <meta charset="utf-8">
    <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>标题</title>
    <link rel="shortcut icon" href="/favicon.ico">
  </head>
  <body>
    <ul id="ulId"></ul>
    <script>
     var ul = document.getElementById("ulId");
     var frag = document.createDocumentFragment();
     var ihtml = ‘‘;
     for (var i = 0; i < 30; i++) {
       var li = document.createElement(‘li‘);
       li.innerHTML = "index: " + i;
       frag.appendChild(li);
     }
     ul.appendChild(frag);
    </script>
  </body>
</html>
时间: 2024-10-21 21:25:00

理解 DocumentFragment的相关文章

深入理解DOM节点类型第四篇——文档片段节点DocumentFragment

× 目录 [1]特征 [2]作用 前面的话 在所有节点类型中,只有文档片段节点DocumentFragment在文档中没有对应的标记.DOM规定文档片段(document fragment)是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源 特征 创建文档片段,要使用document.createDocumentFragment()方法.文档片段继承了Node的所有方法,通常用于执行那些针对文档的DOM操作 文档片段节点的三个node属性——nodeType.nod

理解HTML5中Range对象

1.理解Range对象    重新来学习下HTML5中的Range对象和Selection对象,最近在维护富文本编辑器,感觉这方面的知识点很有用,所以趁着周末多学习下~  什么是Range对象? 在HTML5中,一个Range对象代表页面上的一段连续区域.可以通过如下语句创建一个空的Range对象.如下代码: var range = document.createRange(); 什么是Selection对象? 在HTML5中,每一个浏览器窗口都有一个Selection对象,代表用户鼠标在页面中

从原型链看DOM--Comment,CDATASection,DocumentType,DocumentFragment,Attr类型

这次总结的是剩下的这些DOM类型节点,可能你见过却不经常使用但是了解一下总是好的,可以加深对DOM体系的整体理解~.本篇要介绍的是Comment,CDATASection,DocumentType,DocumentFragment,Attr类型. Comment类型 原型链继承关系为comment实例.__proto__->Comment.prototype->CharacterData.prototype->Node.prototype->EventTarget.prototyp

快速理解JavaScript语法

目录 导论 JavaScript的学习可以跳过哪些 console对象与控制台 console对象 console对象与方法 console.log() console.table() console.count() console.assert() JSON对象 JSON方法 JSON.stringify() JSON.parse() 异步与promise 回调函数 事件监听 Promise 对象 Promise 对象的状态 Promise 构造函数 Promise.prototype.the

Python——深入理解urllib、urllib2及requests(requests不建议使用?)

深入理解urllib.urllib2及requests            python Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年,Python 源代码同样遵循 GPL(GNU General Public License)协议[1] .Python语法简洁而清晰,具有丰富和强大的类库. urllib and urllib2 区别 urllib和urllib2模块都做与请求URL相关的操作,但

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

2.2 logistic回归损失函数(非常重要,深入理解)

上一节当中,为了能够训练logistic回归模型的参数w和b,需要定义一个成本函数 使用logistic回归训练的成本函数 为了让模型通过学习来调整参数,要给出一个含有m和训练样本的训练集 很自然的,希望通过训练集找到参数w和b,来得到自己得输出 对训练集当中的值进行预测,将他写成y^(I)我们希望他会接近于训练集当中的y^(i)的数值 现在来看一下损失函数或者叫做误差函数 他们可以用来衡量算法的运行情况 可以定义损失函数为y^和y的差,或者他们差的平方的一半,结果表明你可能这样做,但是实际当中

理解信息管理系统

1.信息与数据的区别是什么? 数据是记录客观事物,可鉴别的符号,而信息是具有关联性和目的性的结构化,组织化的数据.数据经过处理仍是数据,而信息经过加工可以形成知识.处理数据是为了便于更好的解释,只有经过解释,数据才有意义,才可以成为信息.可以说信息是经过加工以后,对客观世界产生影响的数据. 2.信息与知识的区别是什么? 信息是具有关联性和目的性的结构化,组织化的数据,知识是对信息的进一步加工和应用,是对事物内在规律和原理的认识.信息经过加工可以形成知识. 3.举一个同一主题不同级别的数据.信息.

深度理解div+css布局嵌套盒子

1. 网页布局概述 网页布局的概念是把即将出现在网页中的所有元素进行定位,而CSS网页排版技术有别于传统的网页排版方法,它将页面首先在整体上使用<div>标记进行分块,然后对每个快进行CSS定位以及设置显示效果,最后在每个块中添加相应的内容.利用CSS排版方法更容易地控制页面每个元素的效果,更新也更容易,甚至页面的拓扑结构也可以通过修改相应的CSS属性来重新定位.  2. 盒子模型 盒子模型是CSS控制页面元素的一个重要概念,只有掌握了盒子模型,才能让CSS很好地控制页面上每一个元素,达到我们