ProseMirror 如何监听用户输入并实时获取内容?
我用 ProseMirror 搭了个简单的编辑器,但不知道怎么在用户打字时拿到最新的文档内容。试过在 dispatchTransaction 里用 state.doc.toString(),结果输出的是类似 <doc><paragraph>...</paragraph></doc> 的结构,不是纯文本。
有没有办法直接拿到用户看到的纯文本或者 HTML?是不是得配合 toDOM 或者其他插件?
const editor = new EditorView(document.querySelector('#editor'), {
state: EditorState.create({ schema }),
dispatchTransaction(tr) {
const newState = this.state.apply(tr);
console.log(newState.doc.toString()); // 输出的是 XML-like 字符串
this.updateState(newState);
}
});
state.doc.toString()默认会输出一个类似 XML 的内部表示,而不是纯文本或 HTML。如果你想实时获取用户看到的纯文本内容,可以使用state.doc.textContent。至于 HTML,你需要将文档转换为 DOM 结构,然后序列化为 HTML 字符串。你可以通过DOMSerializer来实现这一点。以下是修改后的代码示例:
这段代码会在每次用户输入时,分别打印出当前文档的纯文本和 HTML 内容。注意,获取 HTML 内容时,你需要确保导入了
DOMSerializer。希望这能解决你的问题。