Editor API 提供了一系列辅助函数,用于查询和操作编辑器状态。
通用选项
At
编辑器中的位置引用。可以是 Location 或 Node。
type At = TLocation | TNode
当传入 Node 时,会使用 editor.api.findPath()
查找其路径。这样您可以通过以下方式引用位置:
示例:
// 使用位置
editor.api.nodes({ at: [0, 0] }) // 路径位置
editor.api.nodes({ at: { path: [0], offset: 0 } }) // 点位置
editor.api.nodes({ at: { anchor: point1, focus: point2 } }) // 范围位置
// 使用节点引用
const node = editor.children[0]
editor.api.nodes({ at: node }) // 内部会查找节点的路径
Match
匹配节点的谓词。谓词可以是:
- 接收
node
和path
并返回boolean
的函数 - 对象,其中每个键值对必须匹配节点的属性
- 值可以是单个值或要匹配的值数组
示例:
// 函数谓词
editor.api.nodes({
match: (node) => node.type === 'p'
})
// 对象谓词
editor.api.nodes({
match: { type: 'p' }
})
// 带多个可能值的对象谓词
editor.api.nodes({
match: { type: ['p', 'h1'] }
})
QueryMode
查询节点层次结构的模式。
mode optional 'all' | 'highest' | 'lowest'
'all'
(默认): 返回所有匹配节点'highest'
: 在节点层次结构中,仅返回最高级别的匹配节点'lowest'
: 在节点层次结构中,仅返回最低级别的匹配节点
示例:
// 给定结构: // - blockquote (匹配) // - paragraph (匹配) // - text // mode: 'all' 返回 blockquote 和 paragraph editor.api.nodes({ match: { type: ['blockquote', 'paragraph'] }, mode: 'all' }) // mode: 'highest' 仅返回 blockquote editor.api.nodes({ match: { type: ['blockquote', 'paragraph'] }, mode: 'highest' }) // mode: 'lowest' 仅返回 paragraph editor.api.nodes({ match: { type: ['blockquote', 'paragraph'] }, mode: 'lowest' })
QueryOptions
查询编辑器中节点的通用选项。
at optional At
查询的起始位置。默认为当前编辑器选区。
block optional boolean
匹配块节点。为 true 时仅匹配块元素。
empty optional boolean
匹配空/非空节点。
- 为 true 时仅匹配空节点
- 为 false 时仅匹配非空节点
id optional boolean | string
按 id 匹配节点。
- 为 true 时匹配所有带 id 的节点
- 为字符串时匹配特定 id 的节点
match optional Predicate<NodeIn<V>>
匹配节点的自定义函数或对象。
- 函数:
(node, path) => boolean
- 对象: 应与节点匹配的键值对
- 函数:
text optional boolean
匹配文本节点。为 true 时仅匹配文本节点。
editor.api
above
获取文档中位置上方匹配的祖先节点。
block
获取位置处的块或查找第一个匹配选项的块。
块通常是顶级节点,因此这是检索祖先块的常用方式。
editor.api.block() // 获取选区上方的块
editor.api.block({ above: true }) // 获取选区上方的块
editor.api.block({ at: [0, 0] }) // 获取 [0, 0] 处的块
editor.api.block({ at: [0, 0], above: true }) // 获取 [0] 处的块
editor.api.block({ highest: true }) // 获取选区处最高级别的块
...options optional QueryOptions<V>
匹配块的通用查询选项。
at optional At | Span
查询位置。默认为当前选区。
ignoreNonSelectable optional boolean
遍历时是否忽略不可选节点。
reverse optional boolean
是否反向遍历。
universal optional boolean
是否确保操作在所有节点上通用。
above optional boolean
为 true 时获取位置上方的块。如果
at
不是块路径则忽略。highest optional boolean
为 true 时获取位置处的最高块(根级块)。
mode optional QueryMode
匹配块的查询模式。
voids optional boolean
是否在搜索中包含 void 节点。
blocks
返回所有匹配的块。
edgeBlocks
返回位置上方的边缘块(默认:选区)。
用于获取范围的起始和结束块。
first
获取位置处的第一个节点。
fragment
获取位置或选区处的片段。
getFragment
返回当前选区处的片段。例如在剪切或复制时使用,获取当前选区的片段。
hasBlocks
检查节点是否有块子节点。
hasInlines
检查节点是否有内联和文本子节点。
hasMark
检查选区处标记是否激活。
hasPath
检查路径是否存在于编辑器中。
hasTexts
检查节点是否有文本子节点。
isAt
检查位置(点/范围)是否在特定位置。
// 对于范围:
editor.api.isAt({ text: true }) // 检查范围是否在单个文本节点内
editor.api.isAt({ block: true }) // 检查范围是否在单个块内
editor.api.isAt({ blocks: true }) // 检查范围是否跨多个块
editor.api.isAt({ start: true }) // 检查范围是否起始于块起始处
editor.api.isAt({ end: true }) // 检查范围是否结束于块末尾
// 对于点:
editor.api.isAt({ word: true }) // 相对于单词边界检查
editor.api.isAt({ start: true }) // 检查是否在起始处
editor.api.isAt({ end: true }) // 检查是否在末尾
isCollapsed
检查选区是否折叠(起始点和结束点相同)。
isEdge
检查点是否是位置的边缘。
isEditorEnd
检查选区是否在编辑器末尾。
isEmpty
检查元素是否为空,考虑 void 节点。
editor.api.isEmpty() // 检查编辑器是否为空
editor.api.isEmpty(at) // 检查位置处的节点是否为空
editor.api.isEmpty(at, { after: true }) // 检查位置后的文本是否为空
editor.api.isEmpty(at, { block: true }) // 检查位置上方的块是否为空
isEnd
检查点是否是位置的结束点。
isExpanded
检查选区是否展开(起始点和结束点不同)。
isNormalizing
检查编辑器当前是否在每个操作后规范化。
isStart
Check if a point is the start point of a location.
isSelected
检查路径是否被当前选区选中。
leaf
获取位置处的叶子文本节点。
levels
遍历位置处的所有层级。这包括直到根编辑器节点的所有祖先。
last
获取位置处的最后一个节点。
mark
通过键返回选区标记值。
marks
获取当前选区处文本将添加的标记。
next
获取文档分支中位置之后的匹配节点。
node
获取指定位置的节点或查找第一个匹配选项的节点。
nodes
遍历编辑器中所有匹配给定选项的节点。
...options optional QueryOptions<V>
匹配节点的通用查询选项。
at optional At | Span
开始遍历的位置。默认为编辑器选区。
ignoreNonSelectable optional boolean
遍历时是否忽略不可选择的节点。
reverse optional boolean
是否反向遍历。
universal optional boolean
是否确保操作在所有节点上通用。
mode optional QueryMode
'all'
: 返回所有匹配的节点'highest'
: 返回最高级别的匹配节点'lowest'
: 返回最低级别的匹配节点
voids optional boolean
搜索时是否包含 void 节点。
parent
获取位置的父节点。
previous
获取文档分支中位置之前的匹配节点。
prop
从节点列表中获取属性值。如果属性值在所有节点中不一致,则返回 undefined
。
string
获取位置的文本字符串内容。
void
匹配编辑器当前分支中的 void 节点。
Location
findPath
查找编辑器中 Plate 节点的路径。
path
获取位置的路径。
point
获取位置的 start
或 end
(默认为 start
)点。
positions
遍历文档中所有可能的点位置。
nodesRange
返回跨越给定节点条目的范围。
range
在两个位置之间创建范围。
start
获取位置的起始点。
unhangRange
将范围转换为非悬挂范围。
"悬挂"范围是由浏览器的"三击"选择行为创建的。当三击一个块时,浏览器会从该块的开始选择到下一个块的开始。因此,该范围"悬挂"到下一个块中。如果给 unhangRange
这样的范围,它会将结束点向后移动,直到它位于悬挂块之前的非空文本节点中。
请注意,unhangRange
是为修复三击块而设计的,因此目前有一些注意事项:
- 它不会修改范围的开始;只修改结束。例如,它不会"取消悬挂"从上一个块末尾开始的选择。
- 只有当开始块被完全选中时才会执行任何操作。例如,它不会处理通过双击段落末尾创建的范围(浏览器会从该段落末尾选择到下一个段落的开始)。
Element
elementReadOnly
检查元素是否为只读。
isBlock
检查值是否为块级 Element
对象。
isInline
检查值是否为内联 Element
对象。
isSelectable
检查值是否为可选择的 Element
对象。
isVoid
检查元素是否为 void。
markableVoid
检查元素是否为可标记的 void 元素。
Ref
pathRef
为 Path
创建可变引用。
pathRefs
获取编辑器当前跟踪的路径引用集合。
pointRef
为 Point
创建可变引用。
pointRefs
获取编辑器当前跟踪的点引用集合。
rangeRef
为 Range
创建可变引用。
rangeRefs
获取编辑器当前跟踪的范围引用集合。
DOM
findDocumentOrShadowRoot
从编辑器中查找文档或影子根。
findEventRange
从 DOM 事件中获取目标范围。
findKey
查找 Plate 节点的键。返回一个 Key
实例,形如 { id: string }
。
getWindow
从编辑器中获取 window 对象。
hasDOMNode
检查 DOM 节点是否在编辑器内。
hasEditableTarget
检查 DOM 目标是否可编辑。
hasRange
检查编辑器是否有范围。
hasSelectableTarget
检查 DOM 目标是否可选。
hasTarget
检查 DOM 目标是否存在。
isComposing
检查用户是否正在编辑器中输入。
isFocused
检查编辑器是否获得焦点。
isReadOnly
检查编辑器是否处于只读模式。
toDOMNode
从 Plate 节点查找原生 DOM 元素。
toDOMPoint
从 Plate 点查找原生 DOM 选择点。
toDOMRange
从 Plate 范围查找原生 DOM 范围。
toSlateNode
从原生 DOM 元素查找 Plate 节点。
toSlatePoint
从 DOM 选择点查找 Plate 点。
toSlateRange
从 DOM 范围查找 Plate 范围。
Callback
onChange
当编辑器发生变化时调用。
Core
getDirtyPaths
获取操作后需要规范化的路径。
shouldNormalizeNode
重写此方法以阻止规范化特定节点。默认返回 true
。
setNormalizing
手动控制编辑器的规范化状态。
shouldNormalize
控制编辑器是否应该在操作后进行规范化。重写此方法以在某些情况下阻止规范化。
History
isMerging
获取合并标志的当前值。
isSaving
获取保存标志的当前值。
isSplittingOnce
获取拆分标志的当前值。
Utils
create.block
创建新块元素的默认块工厂。
create.value
创建新编辑器值的默认值工厂。
On This Page
通用选项At
MatchQueryMode
QueryOptions
editor.api
above
block
blocks
edgeBlocks
first
fragment
getFragment
hasBlocks
hasInlines
hasMark
hasPath
hasTexts
isAt
isCollapsed
isEdge
isEditorEnd
isEmpty
isEnd
isExpanded
isNormalizing
isStart
isSelected
leaf
levels
last
mark
marks
next
node
nodes
parent
previous
prop
string
void
LocationfindPath
path
point
positions
nodesRange
range
start
unhangRange
ElementelementReadOnly
isBlock
isInline
isSelectable
isVoid
markableVoid
RefpathRef
pathRefs
pointRef
pointRefs
rangeRef
rangeRefs
DOMfindDocumentOrShadowRoot
findEventRange
findKey
getWindow
hasDOMNode
hasEditableTarget
hasRange
hasSelectableTarget
hasTarget
isComposing
isFocused
isReadOnly
toDOMNode
toDOMPoint
toDOMRange
toSlateNode
toSlatePoint
toSlateRange
CallbackonChange
CoregetDirtyPaths
shouldNormalizeNode
setNormalizing
shouldNormalize
HistoryisMerging
isSaving
isSplittingOnce
Utilscreate.block
create.value