当讨论DOM树的时候,一般讨论的是节点的层次。DOM定义了Node的接口以及许多种节点类型来表现XML节点的多方面:

Document 顶层节点,所有其他节点依附于该节点
DocumentType DTD引用。它不能包含子节点
DocumentFragment 可以像Document节点一样保存其他节点
Element 其实标签和结束标签之间的内容<tag></tag>或者<tag/>这是唯一一个能够包含特性和子节点的节点类型
Attr 代表一对特性名和特性值,该节点类型不能包含子节点
Text 代表XML文档中在起始标签和结束标签中或者CData Section中的普通文本。该节点不能包含子节点。
CDataSection <![CDATA[]]>的对象表现形式,该节点类型只能包含Text作为子节点。
Entity 在DTD中定义的一个实体对象,这个节点类型不能包含子节点。
EntityReference 代表一个实体引用,这个节点类型不能包含子节点。
ProcessingInstruction 代表一个PI,这个节点类型不能包含子节点。
Comment 代表注释。这个节点类型不能包含子节点。
Notation 代表在DTD中定义的记号

 

一个文档是有任意多个节点的层次组成的。看看下面的XML文档:

 

  1. <?xml version="1.0"?> 
  2. <employees> 
  3.     <!--only employee--> 
  4.     <employee> 
  5.         <name>Michael Smith</name> 
  6.         <position>Software Engineer</position> 
  7.         <comments><![CDATA[ 
  8.                 His Birthday is 8/14/68 
  9.             ]]> 
  10.         </comments> 
  11.     </employee> 
  12. </employees> 

下面的图对应上面的XML文档:

 

JavaScript DOM学习笔记1——DOM节点层次_节点类型

Node接口中定义了不同节点类型对应的常量,它们将在讨论nodeType属性时用到:

Node.ELEMENT_NODE (1)

Node.ATTRBUTE_NODE(2)

Node.TEXT_NODE(3)

Node.CDATA_SECTION_NODE(4)

Node.ENTITY_REFERENCE_NODE(5)

Node.ENTITY_NODE(6)

Node.PROCESSING_INSTRUCTION_NODE(7)

Node.COMMENT_NODE(8)

Node.DOCUMENT_NODE(9)

Node.DOCUMENT_TYPE_NODE(10)

Node.DOCUMENT_FRAGMENT_NODE(11)

Node.NOTATION_NODE(12)

Node接口还定义了一些所有节点都包含的特性与方法。这里就不列举,后面讲到了再详细说。

 

参考书目:

《JavaScript高级编程》Nicolas C. Zakas著, 曹力 张欣 等译。