CKEditor 5 - 插入文本

时间:2018-04-19 17:44:39

标签: ckeditor5

是否可以在当前选择中将文本插入编辑器?

我试过了

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

function insertText() {
  let text = new Text('test');
  ckEditor.model.insertContent(text, ckEditor.model.document.selection);
}

其中ckEditor是从ClassicEditor.create

返回的编辑器对象

代码运行没有错误,但没有任何反应

我已经设法从插件中获取类似的代码,但在这里我试图从主机应用程序注入文本

2 个答案:

答案 0 :(得分:3)

  

我已经设法从插件中获取类似的代码,但在这里我试图从主机应用程序注入文本

当您将其实现为插件时,它有效,因为您使用了Text所依赖的同一个包中的ClassicEditor类。

当您在编辑器中使用捆绑包时尝试执行相同操作时,您在不知不觉中复制了整个@ckeditor/ckeditor5-engine包。这个软件包的一个实例被捆绑到编辑器中,而后来刚刚使用的第二个实例(在你展示的代码片段中),所以webpack再次导入它。

这是我们目前的环境问题 - you can't add plugins to a CKEditor 5 build

幸运的是,我们很久以前就注意到了这个问题,并且从那时起就有了很多改进。插入文本不需要导入任何内容:

editor.model.change( writer => {
    const insertPosition = editor.model.document.selection.getFirstPosition();
    writer.insertText( 'foo', insertPosition );
} );

writer.insertText()方法还可以插入attributes的文字,例如你可以像这样插入粗体文字:

editor.model.change( writer => {
    const insertPosition = editor.model.document.selection.getFirstPosition();
    writer.insertText( 'foo', { bold: true }, insertPosition );
} );

或者,如果您想插入链接,请参阅How to programatically insert link at current position in CKEditor 5

答案 1 :(得分:0)

这对我有用,使用 (ready) 返回的编辑器:

insertTag(tag: string) {
  const insertPosition = this.editor.model.document.selection.getFirstPosition();
  const viewFragment = this.editor.data.processor.toView(`<p>${tag}</p>`);
  const modelFragment = this.editor.data.toModel(viewFragment);
  this.mod.insertContent(modelFragment);
}

另见the font