有没有一种方法可以检测用户选择所有内容?

时间:2020-06-25 01:37:23

标签: javascript ckeditor editor ckeditor5

我正在实现一个插件,并且需要一个用例来检测用户何时选择所有内容。我尝试创建一个像const selectAllSelection = editor.model.createSelection(editor.model.document.getRoot(), 'in')这样的全选,并与当前的model.document.selection进行比较,但是它们并不相同。

1 个答案:

答案 0 :(得分:1)

这些选择有些不同,因为使用createSelection()创建的选择将直接从<$root>开始。实际文档选择将从第一个<paragraph>内部开始。这使得比较有点棘手。

但是,还不错:

  • 检查所选内容是否只有一个范围,
  • 获取文档选择的第一个范围(selection.getFirstRange()),然后使用model.createRangeIn( editor.model.document.getRoot() )在根目录中创建一个范围,
  • 由于我所描述的原因,范围会有所不同,因此我们无法进行range.isEqual()。我们需要使用isTouching()检查开始位置和结束位置。

这看起来或多或少是这样的:

function doesSelectAll( selection ) {
    if ( selection.rangeCount != 1 ) {
        return false;
    }
    
    const firstSelectionRange = selection.getFirstRange();
    const rootRange = editor.model.createRangeIn( editor.model.document.getRoot() );

    return firstSelectionRange.start.isTouching( rootRange.start ) && firstSelectionRange.end.isTouching( rootRange.end );
}