在网页中所有对象和内容都被称为节点,如文档、元素、文本、属性、注释等。节点(Node)是 DOM 最基本的单元,并派生出不同类型的节点,它们共同构成了文档的树形结构模型。
根据 DOM 规范,整个文档是一个文档节点,每个标签是一个元素节点,元素包含的文本是文本节点,元素的属性是一个属性节点,注释属于注释节点,以此类推。
DOM 支持的节点类型说明如表所示。
| 节点类型 | 说明 | 可包含的子节点类型 | 
|---|---|---|
| Document | 表示整个文档,DOM 树的根节点 | Element(最多一个)、ProcessingInstruction、Comment、DocumentType | 
| DocumentFragment | 表示文档片段,轻量级的 Document 对象,仅包含部分文档 | ProcessingInstruction、Comment、Text、CDATASection、EntityReference | 
| DocumentType | 稳文档定义的实体提供接口 | None | 
| ProcessingInstruction | 表示处理指令 | None | 
| EntityReference | 表示实体引用元素 | ProcessingInstruction、Comment、Text、CDATASection、EntityReference | 
| Element | 表示元素 | Text、Comment、ProcessingInstruction、CDATASection、EntityReference | 
| Attr | 表示属性 | Text、EntityReference | 
| Text | 表示元素或属性中的文本内容 | None | 
| CDATASection | 表示文档中的 CDATA 区段,其包含的文本不会被解析器解析 | None | 
| Comment | 表示注释 | None | 
| Entity | 表示实体 | ProcessingInstruction、Comment、Text、CDATASection、EntityReference | 
| Notation | 表示在 DTD 中声明的符号 | None | 
使用 nodeType 属性可以判断一个节点的类型,取值说明如表所示。
| 节点类型 | nodeType 返回值 | 常量名 | 
|---|---|---|
| Element | 1 | ELEMENT_NODE | 
| Attr | 2 | ATTRIBUTE_NODE | 
| Text | 3 | TEXT_NODE | 
| CDATASection | 4 | CDATA_SECTION_NODE | 
| EntityReference | 5 | ENTITY_REFERENCE_NODE | 
| Entity | 6 | ENTITY_NODE | 
| ProcessingInstruction | 7 | PROCESSING_INSTRUCTION_NODE | 
| Comment | 8 | COMMENT_NODE | 
| Document | 9 | DOCUMENT_NODE | 
| DocumentType | 10 | DOCUMENT_TYPE_NODE | 
| DocumentFragment | 11 | DOCUMENT_FRAGMENT_NODE | 
| Notation | 12 | NOTATION_NODE | 
下面示例演示如何借助节点 nodeType 属性检索当前文档中包含元素的个数。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<h1>DOM</h1>
<p>DOM 是<cite>Document Object Model</cite>首字母简写,中文翻译为<b>文档对象模型</b>,是<i>W3C</i>组织推荐的处理可扩展标识语言的标准编程接口。</p>
<ul>
    <li>D 表示文档,HTML 文档结构。</li>
    <li>O 表示对象,文档结构的 JavaScript 脚本化映射。</li>
    <li>M 表示模型,脚本与结构交互的方法和行为。</li>
</ul>
<script>
function count (n) {  //定义文档元素统计函数
    var num = 0;  //初始化变量
    if (n.nodeType == 1)  //检查是否为元素节点
    num ++;  //如果是,则计数器加1
    var son = n.childNodes;  //获取所有子节点
    for (var i = 0; i < son.length; i ++) {  //循环统一每个子元素
        num += count (son[i]);  //递归操作
    }
    return num;  //返回统计值
}
console.log("当前文档包含" + count (document) + "个元素");  //计算元素的总个数
</script>
</body>
</html>
演示效果如下: