XML DOM 最全「属性和方法」速查表(2025 版)
—— 真正日常用到 95% 的全部写在这里了,直接收藏!
一、所有节点共有的核心属性(12 种节点都支持)
| 属性 | 类型 / 返回值 | 说明 | 必背度 |
|---|
| nodeName | string | 节点名称(标签名、#text、#document 等) | ★★★★★ |
| nodeValue | string | null | 节点的值(文本、属性、注释、CDATA 才有) | ★★★★★ |
| nodeType | number (1~12) | 节点类型(1=元素,3=文本,2=属性 等) | ★★★★★ |
| parentNode | Node | null | 父节点 | ★★★★★ |
| childNodes | NodeList | 所有子节点(包括空白文本!) | ★★★★★ |
| firstChild | Node | null | 第一个子节点(常是换行文本) | ★★★★ |
| lastChild | Node | null | 最后一个子节点 | ★★★★ |
| previousSibling | Node | null | 上一个兄弟节点 | ★★★★ |
| nextSibling | Node | null | 下一个兄弟节点 | ★★★★ |
| textContent | string | 获取/设置当前节点及其所有后代文本(最常用!) | ★★★★★ |
| baseURI | string | 文档或节点的基准 URL | ★★ |
现代推荐(自动跳过空白文本节点):
firstElementChild、lastElementChild
previousElementSibling、nextElementSibling
children // 只包含元素子节点
二、Document 节点(文档节点)专属属性和方法
| 属性/方法 | 返回值 | 说明 | 必背度 |
|---|
| documentElement | Element | 根元素() | ★★★★★ |
| doctype | DocumentType | null | 节点 | ★★ |
| createElement(tagName) | Element | 创建元素节点 | ★★★★★ |
| createTextNode(text) | Text | 创建文本节点 | ★★★★★ |
| createAttribute(name) | Attr | 创建属性节点(不推荐,改用 setAttribute) | ★★ |
| createComment(text) | Comment | 创建注释节点 | ★★★ |
| createCDATASection(text) | CDATASection | 创建 CDATA 节点 | ★★ |
| getElementsByTagName(name) | HTMLCollection/NodeList | 按标签名查找(最经典方法) | ★★★★★ |
| getElementById(id) | Element | null | 按 id 查找(XML 必须有 DTD 定义 id 才有效) | ★★★ |
| querySelector(cssSelector) | Element | null | 用 CSS 选择器查找(现代推荐) | ★★★★★ |
| querySelectorAll(cssSelector) | NodeList | 同上,返回全部 | ★★★★★ |
三、Element 元素节点专属属性和方法
| 属性/方法 | 返回值 | 说明 | 必背度 |
|---|
| tagName | string | 标签名(大写,如 BOOK) | ★★★★★ |
| attributes | NamedNodeMap | 所有属性集合 | ★★★★ |
| getAttribute(name) | string | null | 获取属性值 | ★★★★★ |
| setAttribute(name, value) | void | 设置属性(会自动创建) | ★★★★★ |
| removeAttribute(name) | void | 删除属性 | ★★★★★ |
| hasAttribute(name) | boolean | 是否有该属性 | ★★★★ |
| getAttributeNode(name) | Attr | null | 获取属性节点(老写法,几乎不用) | ★ |
| setAttributeNode(attr) | void | 设置属性节点(老写法) | ★ |
四、Attr 属性节点专属(很少直接操作)
| 属性 | 说明 |
|---|
| name | 属性名 |
| value | 属性值(可读写) |
| ownerElement | 所属的元素节点 |
五、增删改节点的核心方法(所有节点都可用)
| 方法 | 说明 | 必背度 |
|---|
| appendChild(newNode) | 添加为最后一个子节点 | ★★★★★ |
| insertBefore(newNode, refNode) | 在 refNode 前插入 | ★★★★★ |
| removeChild(oldNode) | 删除指定子节点(老写法) | ★★★★ |
| replaceChild(newNode, oldNode) | 替换子节点 | ★★★★ |
| cloneNode(deep) | 克隆节点(deep=true 连子节点一起克隆) | ★★★★★ |
| hasChildNodes() | 是否有子节点 | ★★★ |
| normalize() | 合并相邻文本节点,去掉空白文本 | ★★★ |
现代推荐(更简洁):
parent.remove() // 自己删除自己(2023+ 浏览器)
node.before(...nodes) // 在前面插入
node.after(...nodes) // 在后面插入
node.replaceWith(...nodes) // 替换自己
六、最常用的 10 个“一辈子够用”组合(直接背)
| 需求 | 推荐写法(2025) |
|---|
| 获取根元素 | doc.documentElement |
| 取所有 book 节点 | doc.getElementsByTagName(“book”) 或 doc.querySelectorAll(“book”) |
| 取第一个 title 的文本 | node.querySelector(“title”)?.textContent |
| 获取/设置属性 | node.getAttribute(“id”) / node.setAttribute(“id”, “5”) |
| 添加新节点 | parent.appendChild(newNode) |
| 删除节点 | node.remove() 或 parent.removeChild(node) |
| 克隆节点 | node.cloneNode(true) |
| 遍历所有子元素 | for (let child of parent.children) { … } |
| 取纯文本(推荐) | element.textContent |
| 输出 XML 字符串 | new XMLSerializer().serializeToString(doc) |
七、一张图记住所有关系(终极记忆法)
Document (文档节点)
└── documentElement → Element (根元素)
├── attributes → NamedNodeMap → Attr (属性节点)
├── childNodes / children → NodeList / HTMLCollection
│ └── Element / Text / Comment ...
├── firstElementChild ↔ previousElementSibling ↔ nextElementSibling ↔ lastElementChild
└── parentNode ↑
把上面这张表打印/截图贴在显示器旁边,
3 天之内你就能达到“XML DOM 闭眼写”的水平!
需要我给你生成 PDF 版或 Anki 记忆卡片,直接说一声~