外观
dom.el
约 896 字大约 3 分钟
2025-11-03
Emacs 内置的 dom.el 为 dom 操作提供了基础功能。
由 libxml-parse-html-region (以及其他 XML 解析函数)返回的 DOM 是一个树结构,其中每个节点都有一个节点名称(称为标签),可选的键/值属性列表,然后是一个子节点列表。子节点可以是字符串或 DOM 对象。
(body ((width . "101"))
(div ((class . "thing"))
"Foo"
(div nil
"Yes")))创建 DOM 节点
dom-node tag &optional attributes &rest children
此函数创建一个类型为 tag 的 DOM 节点。如果提供,attributes 应该是键/值对列表。如果提供,children 应该是 DOM 节点。
DOM 访问器
以下函数可用于处理 DOM 结构。每个函数都接受一个 DOM 节点,或节点列表。在后一种情况下,仅使用列表中的第一个节点。
dom-tag node
返回节点的标签(也称为“节点名称”)。
dom-attr node attribute
返回节点属性的值。常见用法包括:
dom-children node
返回节点的所有子节点。
dom-non-text-children node
返回节点的所有非字符串子节点。
dom-attributes node
返回节点属性的键/值对列表。
dom-text node
返回节点所有文本元素作为连接的字符串。
dom-texts node
递归地返回节点及其所有子节点的文本元素,作为连接的字符串。此函数还接受一个可选的分隔符,用于在文本元素之间插入。
dom-parent dom node
返回 DOM 中节点的父节点。
dom-remove dom node
从 DOM 中移除节点。
修改 DOM 节点和属性
以下是为修改 DOM 而提供的函数。
dom-set-attribute node attribute value
将节点的属性设置为值。
dom-remove-attribute node attribute
从节点中删除属性。
dom-append-child node child
将 child 节点追加为节点的最后一个子节点。
dom-add-child-before node child before
将 child 节点添加到节点的子节点列表中在 before 节点之前的位置。如果 before 是 nil ,则使 child 节点成为第一个子节点。
dom-set-attributes node attributes
用新的键/值列表替换节点的所有属性。
搜索 DOM 节点
以下是在 DOM 中搜索元素的函数。它们都返回匹配节点的列表。
dom-by-tag dom tag
返回 dom 中所有类型为 tag 的节点。
dom-by-class dom match
返回所有在 dom 中具有与 match 匹配的类名的节点,其中 match 是一个正则表达式。
dom-by-style dom style
返回所有在 dom 中具有与 match 匹配的样式的节点,其中 match 是一个正则表达式。
dom-by-id dom style
返回所有在 dom 中具有与 match 匹配的 ID 的节点,其中 match 是一个正则表达式。
dom-search dom predicate
返回所有在 dom 中,当 predicate 返回非 nil 值的节点。predicate 以 dom 中的 node 为参数。
dom-strings dom
返回 dom 中的所有字符串。
打印 DOM 结构
以下是打印 dom 的函数。
dom-pp dom &optional remove-empty
在当前位置美化打印 dom。如果 remove-empty 非 nil, 则不打印仅包含空白字符的文本节点。
dom-print dom &optional pretty xml
在当前位置打印 dom。如果 xml 非 nil,则按 XML 打印;否则按 HTML 打印。如果 pretty 非 nil,则对 HTML/XML 进行逻辑缩进。
