4

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

我努力了

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

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

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

4

3 回答 3

8

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

当您将它实现为插件时它会起作用,因为那时您使用了依赖于Text的同一包中的类。ClassicEditor

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

这是我们目前遇到的一个环境问题——您不能将插件添加到 CKEditor 5 构建中。

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

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

writer.insertText()方法还可以插入带有属性的文本,例如,您可以像这样插入粗体文本:

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

或者,如果您想插入链接,请参阅如何以编程方式在 CKEditor 5 中的当前位置插入链接

于 2018-04-20T08:34:33.737 回答
0

只需添加,插入文本后启用输入焦点,添加此代码。

editor.editing.view.focus()
于 2022-02-14T01:00:54.747 回答
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);
}

另请参阅字体

于 2021-07-30T01:48:34.823 回答