js创建dom节点之最容易被忽略的createDocumentFragment()方法
来源:互联网 发布:js拼接json字符串数组 编辑:程序博客网 时间:2024/06/05 20:27
js常见的创建dom节点的方法有
- createElement() 创建一个元素节点 => 接收参数为string类型的nodename
- createTextNode() 创建一个文本节点 => 接收参数为string类型的text内容
- createAttribute() 创建一个属性节点 => 接收参数为string类型的属性名称
- createComment() 创建一个注释节点 => 接收参数为string类型的注释文本
本文要说的createDocumentFragment()方法,则是用了创建一个虚拟的节点对象,或者说,是用来创建文档碎片节点。它可以包含各种类型的节点,在创建之初是空的。
DocumentFragment节点不属于文档树,继承的parentNode属性总是null。它有一个很实用的特点,当请求把一个DocumentFragment节点插入文档树时,插入的不是DocumentFragment自身,而是它的所有子孙节点。这个特性使得DocumentFragment成了占位符,暂时存放那些一次插入文档的节点。它还有利于实现文档的剪切、复制和粘贴操作。
另外,当需要添加多个dom元素时,如果先将这些元素添加到DocumentFragment中,再统一将DocumentFragment添加到页面,会减少页面渲染dom的次数,效率会明显提升。
还有一个很重要的特性是,如果使用appendChid方法将原dom树中的节点添加到DocumentFragment中时,会删除原来的节点。
为了证明这一点我做了以下测试:
<body> <ul> <li>Alice</li> <li>Bob</li> </ul> <button onclick="test()">测试</button></body>
js代码中test()方法如下:
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的子孙节点。
1 0
- js创建dom节点之最容易被忽略的createDocumentFragment()方法
- Js之使用dom实现创建节点和删除节点的方法
- HTML DOM createDocumentFragment() 方法
- JS中容易被忽略的基础知识
- JS容易被忽略的小知识点
- js容易被忽略的内容(一)
- 原生 js 操作dom的方法(创建节点和操作节点的几种方法)
- 容易被忽略的collection.frequency方法
- PHP程序员最容易忽略的几个精华之处
- JS性能优化之创建文档碎片(document.createDocumentFragment)
- js -- dom -- js dom html节点的属性方法
- 磁盘:最容易被忽略的性能洼地
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- document的createDocumentFragment()方法
- MyBatis
- Somali Pirates
- 操作系统进程调度先来先服务FCFS
- L1-043. 阅览室
- SQLite 3 一些基本的使用
- js创建dom节点之最容易被忽略的createDocumentFragment()方法
- CentOS 6.8下二进制安装MySQL 5.6
- spss modeler中生成新的变量练习题
- Java Colection集合l
- bzoj 3631 [JLOI2014]松鼠的新家
- 详解java内存泄露和如何避免内存泄漏
- EhCache HelloWorld实现
- L1-044. 稳赢
- 保持图片大小不变的情况下修改图片容量(目前全网已知最简方法)