在 DOM(文档对象模型)中,节点(Node) 是构成整个文档树的基本单位,所有页面元素、文本、注释等都被抽象为不同类型的节点对象。以下是详细解析:
1. 节点的本质
- 内存中的对象:浏览器将 HTML 文档解析为一系列相互关联的 JavaScript 对象
- 继承关系:所有节点都继承自 Node基类,拥有共同的基础属性和方法
- 树状结构:通过父子关系连接,形成文档树(DOM Tree)
2. 核心节点类型
| 节点类型 | 示例 | 说明 | NodeType 值 | 
|---|---|---|---|
| Element | <div>,<p> | HTML 元素节点 | 1 | 
| Text | "Hello" | 元素内的文本内容 | 3 | 
| Comment | <!-- 注释 --> | HTML 注释节点 | 8 | 
| Document | document | 整个文档的根节点 | 9 | 
| DocumentType | <!DOCTYPE html> | DOCTYPE 声明节点 | 10 | 
| DocumentFragment | document.createDocumentFragment() | 轻量级文档片段(虚拟容器) | 11 | 
element
美[ˈelɪmənt]英[‘elɪmənt]
n.要素;原理;【数】元;【军】小队 网络元素;元件;成分
树状层级关系
Document (文档节点) └── HTML (元素节点) ├── HEAD (元素节点) │ └── TITLE (元素节点) │ └── "页面标题" (文本节点) └── BODY (元素节点) └── DIV (元素节点) └── "内容" (文本节点)
3. 节点继承关系图解
关键继承链:
- EventTarget:所有节点可接收事件的基类
- Node:提供基础节点操作(如 parentNode,childNodes)
- Element:添加标签名、属性等特性
- HTMLElement:扩展 HTML 专用属性和方法
4. 节点通用属性和方法
公共属性
const node = document.querySelector('div');
node.nodeType;    // 节点类型(如 1 表示元素)
node.nodeName;    // 节点名称(如 "DIV")
node.nodeValue;   // 节点值(文本/注释节点有效)
node.childNodes;  // 所有子节点(NodeList)
node.parentNode;  // 父节点公共方法
// 节点操作
node.appendChild(newNode);
node.removeChild(oldNode);
node.cloneNode(true); // 深拷贝
// 位置判断
node.contains(otherNode); // 是否包含某节点
node.compareDocumentPosition(otherNode); // 节点位置关系5. 不同类型节点的特性
元素节点(Element)
const el = document.getElementById('demo');
el.tagName;        // 标签名(如 "DIV")
el.className;      // class 属性
el.getAttribute('id'); // 获取属性
el.style.color = 'red'; // 修改样式文本节点(Text)
const textNode = document.createTextNode('Hello');
textNode.data = 'New Text'; // 修改文本内容
textNode.splitText(3);      // 分割文本注释节点(Comment)
const comment = document.createComment('备注');
comment.data = 'Updated'; // 修改注释内容6. 节点与元素的区别
| 特征 | 节点(Node) | 元素(Element) | 
|---|---|---|
| 范围 | 包含所有类型(文本/注释等) | 仅 HTML 标签 | 
| 继承关系 | 继承自 Node | 继承自 Element | 
| 查询方法 | 很少直接操作 | querySelector()等 | 
| 典型属性 | nodeType,nodeName | id,className | 
7. 实际应用示例
遍历所有子节点
function walkNodes(node) {
  if (node.nodeType === 1) {
    console.log('元素节点:', node.tagName);
  } else if (node.nodeType === 3) {
    console.log('文本节点:', node.data.trim());
  }
  node.childNodes.forEach(child => walkNodes(child));
}
walkNodes(document.body);创建节点并插入
// 创建元素节点
const newDiv = document.createElement('div');
// 创建文本节点
const text = document.createTextNode('动态内容');
// 组合节点
newDiv.appendChild(text);
document.body.appendChild(newDiv);总结
节点是 DOM 的原子单位,理解其类型和特性可以:
- 精准操作文档结构
- 高效处理动态内容
- 避免混淆元素和文本节点
- 优化事件委托等高级功能
通过 nodeType 判断节点类型是 DOM 编程的基础技能,尤其在处理混合内容(如富文本编辑器)时至关重要。
 我的书签
 我的书签
                                 添加书签
 添加书签 移除书签
 移除书签