CKEditor5 Вставить текст без разрыва текущего элемента - PullRequest
0 голосов
/ 12 января 2019

У меня есть следующий код для вставки текста в текущей позиции:

editor.model.change( writer => {
                    editor.model.insertContent( writer.createText('[Insert]') );
                });

Это прекрасно работает в большинстве случаев, например, вставка внутри абзаца или заголовка. Пример дан:

До:

<h2>Sample</h2>

После вставки:

<h2>Samp[Insert]le</h2>



Но если текст предварительно отформатирован, например, с нестандартным размером шрифта, он нарушает элемент html:

До:

<p><span class="text-huge">Sample formatted text</span></p>

После вставки:

<p><span class="text-huge">Sample fo</span>[Insert]<span class="text-huge">rmatted text</span></p>

Обратите внимание, что элемент разделен и текст вставлен без применения пользовательских стилей. [Вставить] устанавливается между двумя диапазонами ...

Как я могу вставить текст напрямую без изменения структуры HTML?

1 Ответ

0 голосов
/ 14 января 2019

Это происходит потому, что созданный текстовый узел не имеет установленных атрибутов. Для этого вам нужно получить атрибуты текущего выделения и передать его методу writer.createText(). Тогда созданный текстовый узел будет иметь такие атрибуты:

const model = editor.model;

model.change( writer => {
    const currentAttributes = model.document.selection.getAttributes();

    model.insertContent( writer.createText( '[Foo]', currentAttributes ) );
} );

В качестве альтернативы вы можете использовать метод writer.insertText(), если вы вставляете текст:

editor.model.change( writer => {
    const selection = editor.model.document.selection;

    const currentAttributes = selection.getAttributes();
    const insertPosition = selection.focus;

    writer.insertText( '[Foo]', currentAttributes, insertPosition );
} );
...