在 CKEditor5 实例上的 chrome 扩展中,如何在插入内容之前删除插入符号位置的最后 x 个字符

问题描述 投票:0回答:1

我正在开发一个 chrome 扩展,它用扩展文本替换缩写。我正在处理 CKEditor5 的一个具体案例。 由于 CKEditor 实例仅在后台执行世界“MAIN”中的脚本时可用,因此我在那里执行此脚本:

function injectScript(text, shortcut) {
    const ckEditorElement = document.querySelector('.ck-editor__editable');

    const ckEditorInstance = ckEditorElement?.ckeditorInstance;

    if (ckEditorInstance) {
        ckEditorInstance.model.change( writer => {
            const insertPosition = ckEditorInstance.model.document.selection.getFirstPosition();

            const selectionAttributes = ckEditorInstance.model.document.selection.getAttributes();

            // Delete the last `shortcut.length` characters before inserting content

            ckEditorInstance.model.insertContent( writer.createText( text, selectionAttributes ), insertPosition );
        });
    }
}

我不知道如何在插入扩展文本之前删除缩写。

例如:如果我写

//brb
,我想删除该缩写并将其替换为
be right back
。目前我得到类似
//brbe right back
的信息,因为我还没弄清楚如何删除它。

我尝试在文档中找到的模型上使用此功能 https://ckeditor.com/docs/ckeditor5/latest/api/module_engine_model_model-Model.html#function-deleteContent但我不知道这是否是正确的函数以及如何使用它。

javascript google-chrome-extension ckeditor5
1个回答
0
投票

我自己找到了解决方案。

const startPosition = insertPosition.getShiftedBy(-shortcut.length);

const range = writer.createRange(startPosition, insertPosition);

const selection = writer.createSelection(range);

ckEditorInstance.model.deleteContent(selection);
  1. 使用
    getShiftedBy
  2. 克隆缩写开头的位置
  3. 使用这两个位置创建一个范围
  4. 使用范围创建选择
  5. 将选择传递给模型上的
    deleteContent
    函数。
© www.soinside.com 2019 - 2024. All rights reserved.