主要介绍不常用的DOM类型

这里介绍我们的其他类型,包括以下几个类型:

  • Text类型

  • Comment类型

  • CDATASection类型

  • DocumentType类型

  • DocumentFragment类型

  • Attr类型

<!-- more -->

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指定的位置开始到offset+count为止处的文本

  • splitText(offset)从offset指定的位置将当前文本节点分成两个文本节点

  • substringData(offset,count)提取从offset指定位置开始到offset+count为止的字符串
    除此之外,哈有length属性,保存着节点中字符的数目.且值与nodeValue.length和data.length相同.

注意事项

  • 修改时字符串会经过HTML/XML编码,所以对于小于号,大于号和引号我们要进行转义

创建文本节点

document.createTextNode()接受一个参数,就是插入节点的文本,然后将会根据HTML/XML的格式进行编码.并且在创建时也会为其设置ownerDocument属性.当然我们要将它添加进文档树中还是需要之前介绍过的操作的.

规范化文本节点

normalize()这个方法,在一个包含多个文本节点的父元素上调用该方法,会将所有文本节点合并成一个节点.
注意!(IE6):该方法会导致崩溃

分割文本节点

Text类型提供了splitText方法就是和规范化文本节点相反的一个方法,这个方法我们在之前有介绍到,这是从文本节点提取数据的常用DOM解析技术

Comment类型

这就是注释了,在DOM中通过Comment类型来表示我们的注释.

特征

  • nodeType值为8

  • nodeName值为"#comment"

  • nodeValue值为注释的内容

  • parentNode可能是Document或Element

  • 不支持(没有)子节点

值得注意的是Comment类型和Text类型继承自相同的基类,所有在方法上除了splitText()外所有字符串操作方法都与Text类型相似.

创建

document.createComment(text)这个也与文本节点类似,而我们也很少访问这类节点,所以这里不再赘述

CDATASection类型

只针对XML文档,表示的是CDATA区域,这与Comment类似,并且该类型继承自Text类型,因此除了splitText()方法之外所有字符串操作方法都相似

特征

  • nodeType值为4

  • nodeName值为"#cdata-section"

  • nodeValue为CDATA区域中的内容

  • parentNode可能是Document或Element

  • 不支持(没有)子节点

创建

document.createCDataSection()可以创建CDATA区域,传入参数为传入节点的内容.

DocumentType类型

这在Web浏览器中并不常用

特征

  • nodeType值为10

  • nodeName值为doctype名称

  • nodeValue值为null

  • parentNode是Document

  • 不支持(没有)子节点

在DOM 1级中,DocumentType对象不能动态创建,只能通过解析文档代码方式创建.支持它的浏览器会把DocumentType对象保存在document.doctype中.并且描述了DocumentType对象的3个属性:name,entities和notations.

  • name 表示文档类型名称

  • entities 即文档类型描述的尸体的NamedNodeMap对象

  • notations 是由文档类型描述的符号的NamedNodeMap对象
    通常来说只有name是有用的,它保存了<!DOCTYPE之后的文本.

DocumentFragment类型

在所有节点类型中,只有该类型在文档中没有对应的标记.DOM规定文档片段是一种"轻量级"的文档,可以包含和控制节点,但不会和完整的文档那样占用额外资源.

特征

  • nodeType 值为11

  • nodeName 值为"#document-fragment"

  • nodeValue 为null

  • parentNode为null

  • 子节点可以是Element,ProcessingInstruction,Comment,Text,CDATASection,EntityReference

它可以说是一个文档节点的仓库

创建

document.createDocumentFragment()方法创建文档片段,它继承了Node所有的方法,我们可以通过之前所说的方法添加节点到文档片段中,再通过方法将文档片段添加到文档中,但是这过程中发生的并不是将文档片段添加到文档树.
文档片段本身永远不会成为文档树的一部分,实际上指挥将其所有子节点添加(转移)到相应位置.

Attr类型

元素特性在DOM中以Attr类型表示,在所有浏览器中我们都可以访问Attr类型的构造函数和原型.可以说特性就是存在于元素的attributes属性中的节点.

特征

  • nodeType值为2

  • nodeName为特性名

  • nodeValue为特性值

  • parentNode值为null

  • HTML中不支持(没有)子节点

  • XML中子节点可以是Text或EntityReference
    尽管我们称它为节点,但是特性并不被认为是DOM文档树的一部分.

属性

  • name

  • value

  • specified
    这些在我们之前的章节也有所介绍,不再赘述

创建

document.createAttribute(name)可以创建相应的特性,传入参数为特性名


thewindsword
498 声望19 粉丝

githubpage地址:thewindsword.github.io