document.createDocumentFragment() - 2018-06-29

  • 2018-06-29 创建

常见 dom 操作

js常见的创建dom节点的方法有

  • createElement() 创建一个元素节点 => 接收参数为string类型的nodename
  • createTextNode() 创建一个文本节点 => 接收参数为string类型的text内容
  • createAttribute() 创建一个属性节点 => 接收参数为string类型的属性名称
  • createComment() 创建一个注释节点 => 接收参数为string类型的注释文本

createDocumentFragment()方法

createDocumentFragment()方法,是用了创建一个虚拟的节点对象,或者说,是用来创建文档碎片节点。它可以包含各种类型的节点,在创建之初是空的。

DocumentFragment节点不属于文档树,继承的parentNode属性总是null。它有一个很实用的特点,当请求把一个DocumentFragment节点插入文档树时,插入的不是DocumentFragment自身,而是它的所有子孙节点。这个特性使得DocumentFragment成了占位符,暂时存放那些一次插入文档的节点。它还有利于实现文档的剪切、复制和粘贴操作。
另外,当需要添加多个dom元素时,如果先将这些元素添加到DocumentFragment中,再统一将DocumentFragment添加到页面,会减少页面渲染dom的次数,效率会明显提升。
还有一个很重要的特性是,如果使用appendChid方法将原dom树中的节点添加到DocumentFragment中时,会删除原来的节点

for example

<body>
    <ul>
        <li>Alice</li>
        <li>Bob</li>
    </ul>
    <button onclick="test()">测试</button>
</body>
function test(){
    var li = document.getElementByTaName('li')[0];  //ul中的第一个li节点
    alert(document.getElementByTaName('li')[0].innerText) // 显示Alice

    var newFrag = document.createDocumentFragment();
    newFrag.appendChild(li);

    alert(document.getElementByTaName('li')[0].innerText) // 显示Bod
    alert(document.getElementByTaName('ul')[0].innerHTML)} //显示<li>Bob</li>,由此可见,第一个节点确实被删除了

    //现在fragment中的修改节点
    newFrag.childNode[0].childNodes[0].nodeValue='Candy';
    //更改一个孩子节点的文本内容
    // .childNodes[0].nodeValue等同于:.innerText  或.textContent

     document.getElementByTaName('ul')[0].appendChild(newFrag);
     alert(document.getElementByTaName('ul')[0].innerHTML)} //显示<li>Bob</li><li>Candy</li>  ,由此可见仅仅是添加了newFrag的子孙节点。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  •   DOM(文档对象模型)是针对 HTML 和 XML 文档的一个 API(应用程序编程接口)。   DOM 描绘...
    霜天晓阅读 9,137评论 0 7
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 10,744评论 0 21
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,280评论 19 139
  • 在本文中,您将学到在现有 ASP.NET MVC 框架的 CRUD 项目中,如何使用 SignalR 类库,显示来...
    OneAPM阅读 5,468评论 0 8
  • 有时候,我们在怀疑人生,有时候我们在怀疑自己,不管社会上乞讨有多少,但我相信有许多乞讨者需要我们去关注,因为他们大...
    不一样的我go阅读 1,013评论 0 2

友情链接更多精彩内容