是否可以在当前选择中将文本插入编辑器?
我试过了
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
代码运行没有错误,但没有任何反应
我已经设法从插件中获取类似的代码,但在这里我试图从主机应用程序注入文本
答案 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。