You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CKEditor 5如何在当前选区插入文本?外部注入无响应问题

在CKEditor 5外部向当前选区插入文本的正确方式

你遇到的问题核心在于CKEditor 5的模型修改必须在事务(transaction)中执行——也就是要把插入操作包裹在model.change()的回调函数里。之前在插件内实现成功,是因为插件的API通常已经帮你处理了事务上下文,但外部直接调用时必须手动触发这个事务,这就是代码没报错却没效果的原因。

下面是修正后的完整代码:

import Text from '@ckeditor/ckeditor5-engine/src/model/text';

function insertText() {
  // 必须在model.change()回调中执行所有模型修改操作
  ckEditor.model.change( writer => {
    const text = new Text('test');
    ckEditor.model.insertContent(text, ckEditor.model.document.selection);
  });
}

额外补充:

  • model.change()会创建一个事务,确保所有模型修改能被正确追踪、支持撤销/重做,同时触发编辑器的视图更新。
  • 如果你的选区是折叠状态(仅光标位置),这段代码会在光标处插入文本;如果选中了一段内容,插入操作会直接替换掉选中内容,这是CKEditor的默认行为。
  • 你也可以用编辑器提供的writer.createText()方法创建文本节点,写法更简洁,效果完全一致:
    ckEditor.model.change( writer => {
      const text = writer.createText('test');
      ckEditor.model.insertContent(text, ckEditor.model.document.selection);
    });
    

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:06