使用文档碎片(DocumentFragments)追加DOM元素
标签(空格分隔): JavaScript
DocumentFragment接口表示一个没有父级文件的最小文档对象。它被当做一个轻量版的Document使用,用于存储已排好版的或尚未打理好格式XML片段。最大的区别是因为DocumentFragment不是真实DOM树的一部分,它的变化不会引起DOM树的重新渲染的操作(reflow),且不会导致性能等问题。
最常用的方法是使用文档片段作为参数(例如,任何Node接口类似Node.appendChild和Node.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元素的更多相关文章
- javascript之文档碎片,文档碎片在理论上可以提高DOM操作的执行效率
刚来到这里,趁着还没有忘记,来记录一下,昨晚学习的一个知识点——JavaScript中的文档碎片. 一.对文档碎片的基本认识 文档碎片可以提高DOM操作性能(理论上,注意!!理论上的) 文档碎片原理 ...
- 有关文档碎片(document fragment)的使用方法
通常情况下改动.删除或者添加DOM元素. 更新DOM会导致浏览器又一次绘制屏幕,也会导 致reflow,这样会带来巨大的开销.我们通常解决这的办法尽量降低更新DOM.这也就意 味着将DOM的改变分批处 ...
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- createDocumentFragment 文档碎片提升dom增删的性能
原理: 操作dom会使得页面进行重新渲染,如果 经常性的对dom就行操作或者一次性操作dom较多,每一次操作都会使页面进行重新渲染,降低页面加载性能. 针对IE9以下,可以使用文档碎片(documen ...
- 文档碎片及xml讲解
1.将数据渲染到页面的几种方式 1.字符串拼接 2.dom循环 3.模板 4.文档碎片 字符串拼接: 优势:只进行一次dom回流 缺点:原有的dom事件会消失 案例分析:原有list中有3个li,并且 ...
- js文档碎片
//文档碎片:类似一个临时的文档,要所有要加的dom元素先放在这里,达到不要每次操作dom元素提高页面效率 var d1 = new Date(); //创建十个段落,常规的方式 ; i < ; ...
- 文档碎片DocumentFragment
文档碎片是什么? 参考标准的描述,DocumentFragment是一个轻量级的文档对象,能够提取部分文档的树或创建一个新的文档片段,换句话说有文档缓存的作用. createDocumentFragm ...
- JS JavaScript中的文档碎片 DocumentFragement JS性能优化
文档碎片是什么: 如果我们要在一个ul中添加100个li,如果不使用文档碎片,那么我们就需要使用append经常100次的追加,这会导致浏览器一直不停的渲染,是非常消耗资源的.但是如果我们使用文档碎片 ...
- javascript创建文档碎片节点
在<javascript高级程序设计>一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法: · crateAttribute(name): ...
随机推荐
- C# 调用键盘
首先我们说的键盘指的是:tabtip和osk.但这两个所在的位置不同,样貌也不一样 C:\Windows\System32\osk.exe C:\Program Files\Common Files\ ...
- 【研究】Struts2-048漏洞
1.1 漏洞背景 2017年7月7日,Apache Struts发布最新的安全公告,Apache Struts2-strus1-plugin插件存在远程代码执行的高危漏洞,漏洞编号为CVE-2017- ...
- 在Vue中由后台数据循环生成多选框CheckBox时的注意事项
多选框是一种非常常见的功能,有时候我们会根据后台返回的数据进行多选框渲染,之前做项目时遇到循环生成多选框时,v-model绑定的值会随着选中与取消改变,但页面却不会变化 的情况,后来测试了一下,发现多 ...
- Maths Intro - Probability
设事件A,B,C两辆独立,且满足ABC=空集,及P(A)=P(B)=P(C)=x,求max(x) x最大值为1/2分析: x值要保证所有的由A.B.C交或并得到的集合的概率测度在0到1之间. 先考虑A ...
- Python 的 __new__()方法与实例化
__new__() 是新式类中才有的方法,它执行在构造方法创建实例之前.可以这么理解,在 Python 中类中的构造方法 __init__() 负责将类实例化,而在 __init__() 启动之前,_ ...
- VS 连接数据库报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
VS报错:在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误.未找到或无法访问服务器.请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接. (provider ...
- 【VirtualBox】快照
一.快照备份 虚拟机系统快照下来,以后就可以恢复到快照之前的系统 右上角->虚拟电脑工具->快照
- 1229:密码截获----java
题目描述 Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码 进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解.比 ...
- Java环境搭建与配置、以及Tomcat搭建与配置
首先配置Java jdk环境 列如:jdk1.8.0 : 1.首先windows+e打开文件管理系统,找到系统属性,点击“高级系统设置” ,再点击环境变量: 2.在系统变量里边新建:JAVA_HOM ...
- webpack缓存
缓存 缓存如何工作 1.当缓存客户端需要访问数据时,它首先检查缓存.当在缓存中找到所请求的数据时,它被称为缓存命中. 2.如果在缓存中找不到请求的数据 , 称为缓存未命中的情况,它将从主存储器中提取并 ...