document.createDocumentFragment()的用法
来源:互联网 发布:运行php文件 编辑:程序博客网 时间:2024/05/21 09:22
他支持以下DOM2方法:
a, cloneNode, hasAttributes, hasChildNodes, insertBefore,normalize, removeChild, replaceChild.
也支持以下DOM2属性:
attributes, childNodes, firstChild, lastChild, localName,namespaceURI, nextSibling, nodeName, nodeType, nodeValue,ownerDocument, parentNode, prefix, previousSibling,textContent.
下面是2段测试程序:
var d1 = new Date();
//创建十个段落,常规的方式
for(var i = 0 ; i < 1000; i++) {
}
var d2 = new Date();
document.write("第一次创建需要的时间:"+(d2.getTime()-d1.getTime()));
//使用了createDocumentFragment()的程序
var d3 = new Date();
var pFragment = document_createDocumentFragment();
for(var i = 0 ; i < 1000; i ++) {
}
document.body.a(pFragment);
var d4 = new Date();
document.write("第2次创建需要的时间:"+(d4.getTime()-d3.getTime()));
注:document_createDocumentFragment()说白了就是为了节约使用DOM。每次JavaScript对DOM的操作都会改变页面的变现,并重新刷新整个页面,从而消耗了大量的时间。为解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片的内容一次性添加到document中。
在《javascript高级程序设计》一书的6.3.5:创建和操作节点一节中,介绍了几种动态创建html节点的方法,其中有以下几种常见方法:
· crateAttribute(name): 用指定名称name创建特性节点
· createComment(text): 创建带文本text的注释节点
· createDocumentFragment(): 创建文档碎片节点
· createElement(tagname): 创建标签名为tagname的节点
· createTextNode(text): 创建包含文本text的文本节点
其中最感兴趣且以前没有接触过的一个方法是createComment(text)方法,书中介绍说:在更新少量节点的时候可以直接向document.body节点中添加,但是当要向document中添加大量数据是,如果直接添加这些新节点,这个过程非常缓慢,因为每添加一个节点都会调用父节点的appendChild()方法,为了解决这个问题,可以创建一个文档碎片,把所有的新节点附加其上,然后把文档碎片一次性添加到document中。
假如想创建十个段落,使用常规的方式可能会写出这样的代码:
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.body.appendChild(),每次都要产生一次页面渲染。这时碎片就十分有用了:
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);<br>}
document.body.appendChild(oFragment);
在这段代码中,每个新的<p />元素都被添加到文档碎片中,然后这个碎片被作为参数传递给appendChild()。这里对appendChild()的调用实际上并不是把文档碎片本省追加到body元素中,而是仅仅追加碎片中的子节点,然后可以看到明显的性能提升,document.body.appenChild()一次替代十次,这意味着只需要进行一个内容渲染刷新。
- document.createDocumentFragment()的用法
- document.createDocumentFragment()的用法
- document.createDocumentFragment()的用法
- document.createDocumentFragment()的用法与效率分析
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document.createDocumentFragment()与js效率
- js 性能优化tips-document.createDocumentFragment
- (转)document.createDocumentFragment()与js效率
- CreateDocumentFragment()的妙用
- CreateDocumentFragment的用处
- 如何更深入的理解各种选择器
- 关于Volley网络框架中文乱码的问题
- 求x,y
- BZOJ 3774 最优选择 最小割
- HDU1548---A strange lift
- document.createDocumentFragment()的用法
- 最小生成树之prim算法
- 花匠 2013年NOIP全国联赛提高组
- 删除重复数据,保留重复数据中的一条
- LeetCode 30 Substring with Concatenation of All Words (C,C++,Java,Python)
- Bootstrap的栅格参数
- LeetCode 题解(86): Binary Tree Postorder Traversal
- [图论]继续研究昨天的问题:最短路HDU2544 Floyd算法
- iOS 7 新特性:视图控制器切换API