一、基本类型介绍
1.Node类型
- 所有DOM节点继承该类型,
Node
有一个属性nodeType
表示Node
的类型,它是一个整数,其数值分别表示相应的Node
类型 - 这些
Node
类型中,我们最常用的就是element
,text
,attribute
,comment
,document
,document_fragment
这几种类型
2.Element类型
-
Element
提供了对元素标签名,子节点和特性的访问,我们常用HTML
元素比如div
,span
,a
等标签就是element
中的一种。 -
Element
有下面几条特性:nodeType
为1
nodeName
为元素标签名,tagName
也是返回标签名nodeValue
为null
parentNode
可能是Document
或Element
- 子节点可能是
Element
,Text
,Comment
,Processing_Instruction
,CDATASection
或EntityReference
3.Text类型
Text
表示文本节点,它包含的是纯文本内容,不能包含html
代码,但可以包含转义后的html
代码。Text
有下面的特性:nodeType
为3
nodeName
为#text
nodeValue
为文本内容parentNode
是一个Element
- 没有子节点
4.Attr类型
Attr
类型表示元素的特性,相当于元素的attributes
属性中的节点,它有下面的特性:nodeType
值为2nodeName
是特性的名称nodeValue
是特性的值parentNode
为null
5.Comment类型
Comment
表示HTML
文档中的注释,它有下面的几种特征:nodeType
为8nodeName
为#comment
nodeValue
为注释的内容parentNode
可能是Document
或Element
- 没有子节点
6.Document
Document
表示文档,在浏览器中,document
对象是HTMLDocument
的一个实例,表示整个页面,它同时也是window
对象的一个属性。Document
有下面的特性:nodeType
为9
nodeName
为#document
nodeValue
为null
parentNode
为null
- 子节点可能是一个
DocumentType
或Element
HTML
中的节点并不只是包括元素节点,它还包括文本节点,注释节点等等。在这里我们只是简单地说明了几种常见的节点.
二、 DOM提供的几个属性
1.childNodes属性
- 在一棵节点树上,
childNodes
属性可以用来获取任何一个元素的所有子节点,它是一个包含这个元素全部子元素的数组
element.childNodes
2.nodeType属性
- 节点之间的关系构成了节点层次,
html
页面的可以画出一个以html
标签为根节点的树形结构
DOM
会把文档看作是一棵树,同时定义了很多方法来操作这棵数中的每一个元素(节点)
<html lang="en">
<head>
<title>Document</title>
</head>
<body>
<p>hello world!!!</p>
</body>
</html>
- 每一个节点都有
nodeType
属性
node.nodeType
nodeType
属性总共有12中可能取值,但其中仅有3种有实用价值- 元素节点的
nodeType
属性值是1 - 属性节点的
nodeType
属性值是2 - 文本节点的
nodeType
属性值是3
- 元素节点的
description.firstChild.nodeValue = text;
3.nodeValue属性
nodeValue
属性- 如果想改变一个文本节点的值,那就使用
DOM
提供的nodeValue
,它用来得到一个节点的值node.nodeValue
- 需要注意:
nodeValue
属性获取对象的值时,得到的并不是包含在这个段落里的文本 - nodeValue属性不仅可以用来检测节点的值,还可以设置节点的值
- 如果想改变一个文本节点的值,那就使用
4.firstChild和lastChild属性
- 数组元素
childNodes[0]
有个更直观的同义词。无论如何,只要访问childNodes
数组的第一个元素,都可以把它写成firstChild
node.firstChild
与下面等价
node.childNodes[0]
DOM
还提供了一个与之对应的lastChild
属性
node.lastChild
三、节点创建型API
1.createElement
createElement
通过传入指定的一个标签名来创建一个元素,如果传入的标签名是一个未知的,则会创建一个自定义的标签,注意:IE8
以下浏览器不支持自定义标签
var div = document.createElement("div");
- 使用
createElement
要注意:通过createElement
创建的元素并不属于html
文档,它只是创建出来,并未添加到html
文档中,要调用appendChild
或insertBefore
等方法将其添加到HTML
文档树中
2.createTextNode
createTextNode
用来创建一个文本节点,用法如下
var textNode = document.createTextNode("一个TextNode");
createTextNode
接收一个参数,这个参数就是文本节点中的文本,和createElement
一样,创建后的文本节点也只是独立的一个节点,同样需要appendChild
将其添加到HTML
文档树中
3.cloneNode
cloneNode
是用来返回调用方法的节点的一个副本,它接收一个bool
参数,用来表示是否复制子元素,使用如下:
var parent = document.getElementById("parentElement");
var parent2 = parent.cloneNode(true);// 传入true
parent2.id = "parent2";
- 这段代码通过
cloneNode
复制了一份parent
元素,其中cloneNode
的参数为true
,表示parent
的子节点也被复制,如果传入false
,则表示只复制了parent
节点
<div id="parent">
我是父元素的文本
<br/>
<span>
我是子元素
</span>
</div>
<button id="btnCopy">复制</button>
var parent = document.getElementById("parent");
document.getElementById("btnCopy").onclick = function(){
var parent2 = parent.cloneNode(true);
parent2.id = "parent2";
document.body.appendChild(parent2);
}
-
这段代码很简单,主要是绑定
button
事件,事件内容是复制了一个parent
,修改其id
,然后添加到文档中