请教一个问题

请教一个问题

document.createFragment()方法的意义是什么?Fragment文档片段的概念不清楚?它在DOM上没有显示,能解释一下这两个问题吗

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

你好,

同学说的是这三个分享按钮不好用吗?

http://img1.sycdn.imooc.com//climg/5d6e34680001047b08020269.jpg

这边测试效果是可以的哦,例如点击微信,会出现一个二维码:

http://img1.sycdn.imooc.com//climg/5d6e34e40001215103290302.jpg

用手机微信App中扫一扫功能就会出现当前题目,然后右上角分享即可:

http://img1.sycdn.imooc.com//climg/5d6e3acd0001092405121000.jpg

自己可以再试试哦。

同学说的收藏功能,可以对应到自己的笔记中,将当前问题链接放到自己的笔记中,也是可以保存的哦。

祝学习愉快!

好帮手慕星星 2019-09-03 11:17:57

同学你好,

document.createFragment()方法常用于向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);
}    
document.body.appendChild(oFragment);

在这段代码中,每个新的<p />元素都被添加到文档片段中,然后这个片段被作为参数传递给appendChild()。这里对appendChild()的调用实际上并不是把文档片段本身追加到body元素中,而是仅仅追加片段中的子节点,然后可以看到明显的性能提升,document.body.appenChild()一次替代十次,这意味着只需要进行一个内容渲染刷新。DOM中也不会出现片段oFragment标签,只有里面的内容:

http://img1.sycdn.imooc.com//climg/5d6ddb3f00019c0203980421.jpg

自己可以测试理解下,祝学习愉快!

  • 非常感谢,说的很详细,受益匪浅,但是这个答案分享QQ、微信的功能都不能正常使用,页面也没有收藏功能,我建议页面添加一个收藏的功能,方便以后查阅
    2019-09-03 14:29:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师