有没有办法按代码选择CKEditor 5的所有内容?

时间:2018-03-19 07:58:49

标签: ckeditor ckeditor5

我想选择编辑器的所有内容并在CKEditor 5中对其执行命令。

有可能吗?

1 个答案:

答案 0 :(得分:0)

最短的代码可以帮到你:

const root = doc.getRoot();

editor.model.change( writer => {
    writer.setSelection( root, 'in' );

    // Execute command in the same change() block to have just one undo step.
    editor.execute( 'someCommand' );
} );

它使用模特作家的setSelection()

然而,这并不完全正确。上面的代码尝试进行以下选择:

<$root>[<paragraph>X</paragraph><paragraph>Y</paragraph>]</$root>

虽然你想拥有的是:

<$root><paragraph>[X</paragraph><paragraph>Y]</paragraph></$root>

那是因为选择应始终坚持文本(或object elements)。

幸运的是,自版本11.0.0起,CKEditor 5验证了选择的位置,因此它将自动移动到正确的位置。

在v11.0.0之前或者如果你想要真正正确,你需要在内容的开头和结尾处实现更长的解决方案finds the right selection positions

import Range from '@ckeditor/ckeditor5-engine/src/model/range';

const doc = editor.model.document;
const root = doc.getRoot();

editor.model.change( writer => {
    const range = Range.createIn( root );

    const startRange = editor.model.schema.getNearestSelectionRange( range.start );
    const endRange = editor.model.schema.getNearestSelectionRange( range.end );

    writer.setSelection( new Range( startRange.start, endRange.end ) );

    // Execute command in the same change() block to have just one undo step.
    editor.execute( 'someCommand' );
} );