DOM中比较常用的类型有Element类型,Text类型,Attr类型,Comment类型(注释),Document类型(文档),DocumentFragment类型。

Element类型

提供了对元素标签名,子节点,特性的访问。

nodeType:1

nodeName:元素标签名,tagName也是返回标签名。

nodeValue:null。

parentNode:可能是Element或者是Document。

子节点可能是Element,Text,Comment等

Text类型

表示文本节点,包含的是纯文本内容,不能包含html代码,但可以包含转义之后的html代码。

nodeType:3

nodeName:#text

nodeValue:文本内容

parentNode:是一个Element。

没有子节点

Attr类型

Attr类型表示元素的特性,相当于元素的attributes属性中的节点。

nodeType:2

nodeName:特性的名称

nodeValue:特性的值

parentNode:null。

Node类型

childNodes属性

每个节点都有一个childNodes属性,其中保存着一个NodeList对象,NodeList对象是一种类数组对象,用于保存一组有序的节点,可以通过位置来访问这些节点。虽然这个对象有length属性 ,但是它不是Array的实例。NodeList对象的独特之处在于,它实际上是基于DOM结构动态执行查询的结果,因此DOM结构的变化能够自动反应在NodeList对象中,

关键点:

将arguments对象使用Array.prototype.slice方法可以将其转换为数组。所以我们也可以将NodeList对象转换为数组。

var arrayOfNodes = Array.prototype.slice.call(someNode.childNodes,0);

//所有浏览器
function covertToArray(nodes){
var array = null;
try{
array = Array.prototype.slice.call(nodes,0)l;
}catch(ex){
array = new Array();
for (var i=0,len = nodes.length;i<len;i++){
array.push(nodes[i]);
}
} return array;
}

parentNode属性

当然除了childNodes属性还有parentNode属性,该属性指向文档树中的父节点。

包含在childNodes列表中的所有节点都有相同的父节点,因此它们的parentNode属性都指向同一个节点。childNodes列表中的每一个节点相互之间都是同胞节点,可以使用列表中每一个节点的previousSibling和nextSibling属性,可以访问到同一列表中的其他节点。还有firstChild和lastChild属性。当这两个属性值相等的时候,childNodes列表中只有一个节点。

ownerDocument属性,

节点创建方法

1.createElement("div"),传入标签名

2.createTextNode("个人个人");传入文本。

3.cloneNode(true/false):这个方法是返回调用这个方法的节点的一个副本,如果参数为true,表示复制子元素。否则不会复制子元素。

这里有一个注意点:如果被复制的节点绑定了事件,则副本也会跟着绑定该事件吗?这里分情况讨论

(1)如果是通过addEventListener或者是onclick进行绑定事件,则副本节点不会绑定该事件。

(2)如果是内联方式绑定的:

<div onclick="show()"></div>

这样的话,副本节点同样会触发事件。

4.createDocumentFragment

这个方法是用来创建一个DocumentFragment。DocumentFragment表示一种轻量级的文档,主要作用是存储临时性的节点用来准备添加到文档中的。

createDocumentFragment方法主要是用来添加大量节点到文档中时会使用到。假设要循环一组数据,然后创建多个节点添加到文档中,

<ul id="list"></ul>
<input type="button" value="添加多项" id="btnadd"> <script type="text/javascript">
document.getElementById("btnadd").onclick = function(){
var list = document.getElementById("list");
for(var i=0;i<100;i++){
var li = document.createElement("li");
li.textContent = i;
list.appendChild(li);
}
}
/*但是上面的代码会造成回流,这时候就需要用到createDocumentFragment方法*/
document.getElementById("btnadd").onclick = function(){
var list = document.getElementById("list");
var fragment = document.createDocumentFragment(); for(var i=0;i<100;i++){
var li = document.createElement("li");
li.textContent = i;
fragment.appendChild(li);
} list.appendChild(fragment);
}
</script>

DocumentFragment不是文档树的一部分,它是保存在内存中的,所以不会造成回流问题。先将生成的li节点添加到fragment,最后一次性添加到list。

创建型API总结

主要包括这几个方法:createElemnt,createTextNode,cloneNode,createDocumentFragment四个方法。

需要注意下面几个点:

(1)他们创建的节点都只是一个孤立的节点,要通过appendChild添加到文档中。

(2)cloneNode要注意如果被复制的节点是否包含子节点以及事件绑定等问题。

(3)使用createDocumentFragment来解决添加大量节点时的性能问题。

DOM操作(一)的更多相关文章

  1. jQuery学习之路(2)-DOM操作

    ▓▓▓▓▓▓ 大致介绍 jQuery作为JavaScript库,继承并发扬了JavaScript对DOM对象操作的特性,使开发人员能方便的操作DOM对象. ▓▓▓▓▓▓ jQuery中的DOM操作 看 ...

  2. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  3. 摆脱DOM操作,从TodoMVC看angularJS

    取代jQuery? 我很久之前便听说了angularJS的大名,之前的leader也经常感叹angularJS的设计如何如何精妙,可叹一直没有机会深入了解,国庆长假因为没钱出游,倒是可以对他做一个了解 ...

  4. 前端页面卡顿?或是DOM操作惹的祸,需优化代码

    文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...

  5. webform(九)——JQuery基础(选择器、事件、DOM操作)

    JQuery -- 一个js函数包 一.选择器 1.基本选择器 ①id选择器:#       ②class选择器:.       ③标签名选择:标签名 ④并列选择:用,隔开          ⑤后代选 ...

  6. HTML 学习笔记 JQuery(DOM 操作)

    一般来说,DOM操作分为三个方面,即:DOM Core(核心), HTML_DOM 和 CSS_DOM. 1.DOM Core DOM Core 并不专属于JavaScript,任何一种支持DOM的程 ...

  7. dom操作导致超级卡顿。。。

    var i=0;j=30;setinterval(function(){ document.getElementId(idname).style.top=j+'px'; i<3?i++:i=0; ...

  8. php中通过DOM操作XML

    DOM文档在js里早就接触过,知道DOM不但可以操作html文档,还可以操作XHTML,XML等文档,有着极强的通用性,下面我们通过两个小例子,看看在PHP中是如何用DOM操作XML文档的,和js中差 ...

  9. jQuery的DOM操作详解

    DOM(Document Object Model-文档对象模型):一种与浏览器, 平台, 语言无关的规则, 使用该接口可以轻松地访问页面中所有的标准组件DOM操作的分类 核心-DOM: DOM Co ...

  10. [译]AngularJS中DOM操作

    再翻译一篇干货短文,原文:AngularJS jQuery 虽然Angularjs将我们从DOM的操作中解放出来了,但是很多时候我们还是会需要在controller/view加载之后执行一些DOM操作 ...

随机推荐

  1. Django 1.10中文文档-第一个应用Part5-测试

    本教程上接教程Part4. 前面已经建立一个网页投票应用,现在将为它创建一些自动化测试. 自动化测试简介 什么是自动化测试 测试是检查你的代码是否正常运行的行为.测试也分为不同的级别.有些测试可能是用 ...

  2. Low-overhead enhancement of reliability of journaled file system using solid state storage and de-duplication

    A mechanism is provided in a data processing system for reliable asynchronous solid-state device bas ...

  3. 檢查 cpu 的全部 gpio 狀態及設定

    $ adb root # cat /sys/kernel/debug/gpio

  4. python基础===Excel处理库openpyxl

    openpyxl是一个第三方库,可以处理xlsx格式的Excel文件. 安装: pip install openpyxl 对如下excel进行读取操作,如图: from openpyxl import ...

  5. 1003: FFF团的情侣活动--课程作业--找出N个数字中唯一出现奇数次的数

    1003: FFF团的情侣活动 Time Limit: 1 Sec  Memory Limit: 2 MB Description 圣诞节快到了,Water作为大FFF团团长,组织许多对情侣进行电影院 ...

  6. 使用Storm实现实时大数据分析(转)

    原文链接:http://blog.csdn.net/hguisu/article/details/8454368 简单和明了,Storm让大数据分析变得轻松加愉快. 当今世界,公司的日常运营经常会生成 ...

  7. js-callee,call,apply概念

    JS - caller,callee,call,apply 概念[转载] 在提到上述的概念之前,首先想说说javascript中函数的隐含参数:arguments Arguments : 该对象代表正 ...

  8. 22:django 配置详解

    django配置文件包含了你的django安装的所有配置信息,本节为大家详细讲解django的配置 基本知识 一个配置文件只是一个包含模块级别变量的的python模块,所有的配置变量都是大写的,哈哈哈 ...

  9. Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)

    题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...

  10. http之post方法 提交数据的四种方法

    http协议中,post方法用来向服务端提交数据, 这里介绍四种方式: application/x-www-form-urlencoded multipart/form-data applicatio ...