标签(空格分隔): JavaScript


DocumentFragment接口表示一个没有父级文件的最小文档对象。它被当做一个轻量版的Document使用,用于存储已排好版的或尚未打理好格式XML片段。最大的区别是因为DocumentFragment不是真实DOM树的一部分,它的变化不会引起DOM树的重新渲染的操作(reflow),且不会导致性能等问题。

最常用的方法是使用文档片段作为参数(例如,任何Node接口类似Node.appendChildNode.insertBefore的方法),这种情况下被添加(append)或被插入(inserted)的是片段的所有子节点,而非片段本身。因为所有的节点会被一次插入到文档中,而这个操作仅发生一个重渲染操作,而不是每个节点分别被插入到文档中,因为后者会发生多次渲染的操作。

该接口在Web组件中也非常有用:模板元素在其HTMLTemplateElement.content属性中包含了一个DocumentFragment

可以使用document.createDocumentFragment方法或者构造函数来创建一个空的DocumentFragment。


一、属性

该接口没有特殊的属性,其属性否继承自Node,并补充了ParentNode接口接口中的属性。

ParentNode.children [只读][实验属性]

返回一个实时(live)HTMLCollection,包含所有属于DocumentFragment的元素类型的子对象。

ParentNode.firstElementChild [只读][实验属性]

返回DocumentFragment的第一个Element类型的子对象,如果没有则返回null

ParentNode.lastElementChild [只读][实验属性]

返回DocumentFragment的最后一个Element类型的子对象,如果没有则返回null

ParentNode.childElementCount [只读][实验属性]

返回一个无符号长整型,给出DocumentFragment所有子项的数量。

二、构造函数

DocumentFragment() [实验属性]

返回空的DocumentFragment对象。

三、方法

该接口继承Node的全部方法,并实现了ParentNode接口的方法。

DocumentFragment.find() [实验属性]

返回DocumentFragment树里第一个匹配的元素Element

DocumentFragment.findAll() [实验属性]

返回DocumentFragment树里所有匹配的元素NodeList

DocumentFragment.querySelector()

返回DocumentFragment中的第一个元素节点,按照文档顺序,并与指定的选择器匹配。

DocumentFragment.querySelectorAll()

DocumentFragment.getElementById()

四、兼容性

Desktop

特性 Chrome FireFox IE Opera Safari
基本支持 1.0 1.0 Yes Yes Yes
querySelector() querySelectorAll() 1.0 3.5 8.0 10.0 3.2(525.3)
find() findAll() 不支持 不支持 不支持 不支持 不支持
DocumentFragment() 构造函数 28.0 24.0 不支持 15.0 不支持
ParentNode 属性 28.0 24.0 不支持 15.0 不支持
ParentNode 方法 不支持 不支持 不支持 不支持 不支持

Mobile

特性 Android Firefox Mobile IE Mobile Opera Mobile Safari Mobile
基本支持 Yes 1.0 Yes Yes Yes
querySelector() querySelectorAll() 2.1 3.5 8.0 10.0 3.2(525.3)

* 其余实验属性参见原文

五、示例

当我们要想document中添加大量DOM节点时,如果循环插入,会出现明显的性能问题。我们也可以创建个新节点,比如说div,然后将div一次性插入document中,但是这样会多加一层div,而文档碎片(DocumentFragment)不会产生这种节点。

var docFragment = document.createDocumentFragment();

for (var i = counts; i > 0; i--) {
var node = document.createElement('p');
var node_text = document.createTextNode(i + ', hehe'); node.appendChild(node_text); docFragment.appendChild(node);
} document.body.appendChild(docFragment);

Last updated by: Jehorn, Dec 26, 2017, 11:20 AM

使用文档碎片(DocumentFragments)追加DOM元素的更多相关文章

  1. javascript之文档碎片,文档碎片在理论上可以提高DOM操作的执行效率

    刚来到这里,趁着还没有忘记,来记录一下,昨晚学习的一个知识点——JavaScript中的文档碎片. 一.对文档碎片的基本认识 文档碎片可以提高DOM操作性能(理论上,注意!!理论上的) 文档碎片原理 ...

  2. 有关文档碎片(document fragment)的使用方法

    通常情况下改动.删除或者添加DOM元素. 更新DOM会导致浏览器又一次绘制屏幕,也会导 致reflow,这样会带来巨大的开销.我们通常解决这的办法尽量降低更新DOM.这也就意 味着将DOM的改变分批处 ...

  3. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. createDocumentFragment 文档碎片提升dom增删的性能

    原理: 操作dom会使得页面进行重新渲染,如果 经常性的对dom就行操作或者一次性操作dom较多,每一次操作都会使页面进行重新渲染,降低页面加载性能. 针对IE9以下,可以使用文档碎片(documen ...

  5. 文档碎片及xml讲解

    1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...

  6. js文档碎片

    //文档碎片:类似一个临时的文档,要所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率 var d1 = new Date(); //创建十个段落,常规的方式 ; i < ; ...

  7. 文档碎片DocumentFragment

    文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...

  8. JS JavaScript中的文档碎片 DocumentFragement JS性能优化

    文档碎片是什么: 如果我们要在一个ul中添加100个li,如果不使用文档碎片,那么我们就需要使用append经常100次的追加,这会导致浏览器一直不停的渲染,是非常消耗资源的.但是如果我们使用文档碎片 ...

  9. javascript创建文档碎片节点

    在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...

随机推荐

  1. bzoj3261: 最大异或和 (可持久化trie树)

    题目链接 题解 看到异或和最大就应该想到01 trie树 我们记\(S_i\)为前i项的异或和 那么我们的目的是最大化\(S_n\)^\(x\)^\(S_{j-1}\) \((l <= j &l ...

  2. Training set,Gallery set 和Probe set的区别

    这段时间看了CVPR2017的这篇论文”SphereFace:Deep Hypersphere Embedding for Face Recognition" 里面有提到Probe set, ...

  3. UVA - 10817 状压DP

    题意:大白P95 本题比较特别的是状压两个集合并且进行转移,因此要分别处理当前集合只有1个老师/2个老师的记录(然后可O(1)得出0个老师的集合) 记忆化过了但是迭代式不能记忆超过2的之前的状态是怎样 ...

  4. ZOJ - 3623 完全背包变种

    题意理解有误导致方程建歪,题意是n种类型的船造成至少L伤害的最小时间,攻击过程是不必同步的 #include<iostream> #include<algorithm> #in ...

  5. HDU 2879 数论

    HeHe Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total Submis ...

  6. Python爬虫常用之PyQuery

    PyQuery是解析页面常用的库.是python对jquery的封装.下面是一份解析基本页面的代码.后期用到复杂或者实用的方式再增加. from pyquery import PyQuery as p ...

  7. 依赖倒置(Dependence Inversion Principle)DIP

    关于抽象类和接口的区别,可以参考之前的文章~http://www.cnblogs.com/leestar54/p/4593173.html using System; using System.Col ...

  8. PHP 编译安装 gd 库

    作者博文地址:https://www.cnblogs.com/liu-shuai/ 安装gd依赖库 freetype wget http://download.savannah.gnu.org/rel ...

  9. linux服务器时间自动同步

    最常用的是 rdate 服务 安装(centOs为例): yum install -y rdate 用法: rdate -s time-b.nist.gov 执行完以上方法时间就同步了.有的服务器隔一 ...

  10. L1-002 打印沙漏 (20 分)

    L1-002 打印沙漏 (20 分) 方法:清晰思路,纸上写出实例,注意循环使用 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * ** ...