首页 > 代码库 > DOM-Text类型、Comment类型、CDATASection类型、DocumentType类型、DocumentFragment类型、Attr类型

DOM-Text类型、Comment类型、CDATASection类型、DocumentType类型、DocumentFragment类型、Attr类型

Text类型

文本节点由Text类型表示,包含的是可以照字面解释的纯文本内容。Text节点具有以下特征:

nodeType的值为3
nodeName的值为"text"
nodeValue的值为节点所包含的文本
parentNode的值为一个Element
没有子节点

可以通过nodeValue属性或者data属性访问Text节点中所包含的文本。使用下列方法可以操作节点中的文本:

appendData(text):将text添加到节点的末尾。
deleteData(offset,count):从offset指定的位置开始删除count个字符。
insertData(offset,text):在offset指定的位置插入text。
replaceData(offset,count,text):用text替换从offset开始到count的所有文本。
splitText(offset):从offset指定的位置将当前文本分成两个文本节点。
substringData(offset,count):提取从offset指定的位置开始到offset+count为止的字符串

除了这些方法还有一个length属性,保存着节点中字符的数目。而且nodeValue.length和data.length中也保存着同样的值

在默认情况下,每个可以包含内容的元素最多只能有一个文本节点,而且必须确实有内容存在。

1、创建文本节点

document.createTextNode()创建新文本节点,这个方法接受一个参数即要插入节点中的文本。与设置已有文本节点的值一样,作为参数的文本也将按照HTML或XML的格式进行编码。在创建
新文本节点的同时,也会为其设置ownerDocuemnt属性。

1         var textNode = document.createTextNode("<strong>Hello</strong> world!");

一般情况下,每个元素只有一个文本子节点。不过,在某些情况下也可能包含多个文本子节点,如下:

 1         var element = document.createElement(‘div‘); 2         element.className = "message"; 3  4         var textNode = docuemnt.createTextNode(‘Hello world!‘); 5         element.appendChild(textNode); 6  7         var anotherTextNode = document.createTextNode(‘Yippee!‘); 8         element.appendChild(anotherTextNode); 9 10         document.body.appendChild(element);

如果两个文本节点是相邻的同胞节点,那么这两个节点中的文本就会连起来显示,中间不会有空格

2、规范化文本节点

DOM文档中存在相邻的同胞文本节点很容易导致混乱,因为分不清哪个文本节点表示哪个字符串。normalize()能够将相邻文本节点合并的方法,在一个包含两个或者多个文本节点的父元素上调用
normalize()方法,则会将所有文本节点合并成一个节点。

 1         var element = document.createElement(‘div‘); 2         element.className = "message"; 3  4         var textNode = document.createTextNode(‘Hello world!‘); 5         element.appendChild(textNode); 6  7         var anotherTextNode = document.createTextNode(‘Yippee!‘); 8         element.appendChild(anotherTextNode); 9 10         document.body.appendChild(element);11 12         alert(element.childNodes.length); //213 14         element.normalize();15         alert(element.childNodes.length); //116         alert(element.firstChild.nodeValue); //Hello world!Yippee!

3、分割文本节点

splitText(),会将一个文本节点分成两个文本节点。这个方法会返回一个新文本节点,该节点与原节点的parentNode相同

 1         var element = document.createElement(‘div‘); 2         element.className = "message"; 3  4         var textNode = document.createTextNode(‘Hello world!‘); 5         element.appendChild(textNode); 6  7         document.body.appendChild(element); 8  9         var newNode = element.firstChild.splitText(5);10         alert(element.firstChild.nodeValue); //Hello11         alert(newNode.nodeValue); // world!12         alert(element.childNodes.length); //2

Comment类型

注释在DOM中是通过Comment类型来表示的,Comment节点具有下列特征:

nodeType的值为8
nodeName的值为"#comment"
nodeValue的值是注释的内容
parentNode的值是Document或者Element

Comment类型与Text类型继承自相同的基类,因此它拥有除splitText()之外的所有字符串操作方法。
注释节点可以通过其父节点来访问:

1     <div id="myDiv"><!--A comment --></div>

在此,注释节点是<div>元素的一个子节点。

CDATASection类型

CDATASection类型只针对基于XML的文档,表示的是CDATA区域,CDATASection类型与Text类型继承自相同的基类,因此它拥有除splitText()之外的所有字符串操作方法

nodeType的值为4
nodeName的值为"#cdata-section"
nodeValue的值是CDATA区域中的内容
parentNode的值是Document或者Element

DocumentType类型

DocumentType包含着与文档的doctype有关的所有信息,它具有下列特征:

nodeType的值为10
nodeName的值是doctype的名称
nodeValue的值是null
parentNode的值是Document或者Element

DocumentFragment类型

DOM规定文档片段是一种“轻量级”的文档,可以包含和控制节点,但不会像完整的文档那样占用额外的资源。DocumentFragment类型具有下列特征:

nodeType的值为11
nodeName的值是"#document-fragment"
nodeValue的值是null
parentNode的值是null
子节点可以是Element、ProcessingInstruction、Comment、Text、CDATASection或EntityReference。

虽然不能把文档片段直接添加到文档中,但可以将它作为一个“仓库”来使用,即可以在里面保存将来可能会添加到文档中的节点。要创建文档片段,可以使用document.createDocumentFragment()方法,如下:

1     var fragment = document.createDocumentFragment();

为一个<ul>元素添加3个列表项

 1     <ul id="myList"></ul> 2  3     var fragment = document.createDocumentFragment(); 4     var ul = document.getElementById(‘myList‘); 5     var li = null; 6  7     for(var i=0;i<3;i++){ 8         li = document.createElement(‘li‘); 9         li.appendChild(document.createTextNode("Item " + (i+1)));10         fragment.appendChild(li);11     }12 13     ul.appendChild(fragment);

 Attr类型

元素的特性在DOM中以Attr类型来表示,特性就是存在于元素attributes属性中的节点。特性节点具有下列特征:

nodeType的值为2
nodeName的值是特性的名称
nodeValue的值是特性的值
parentNode的值是null

Attr对象有3个属性:name、value 和specified。其中name是特性名称,value是特性的值,而specified是一个布尔值,用以区别特性是在代码中指定的,还是默认的。

DOM-Text类型、Comment类型、CDATASection类型、DocumentType类型、DocumentFragment类型、Attr类型