Selection (engine/view)
@ckeditor/ckeditor5-engine/src/view/selection
Class representing an arbirtary selection in the view.
See also DocumentSelection
.
New selection instances can be created via the constructor or one these methods:
A selection can consist of ranges that can be set by using
the Selection#setTo()
method.
Filtering
Properties
-
Selection anchor. Anchor may be described as a position where the selection starts. Together with focus they define the direction of selection, which is important when expanding/shrinking selection. Anchor is always the start or end of the most recent added range. It may be a bit unintuitive when there are multiple ranges in selection.
Related:
-
editableElement : EditableElement | null
module:engine/view/selection~Selection#editableElement
EditableElement instance that contains this selection, or
null
if the selection is not inside an editable element. -
fakeSelectionLabel : String
module:engine/view/selection~Selection#fakeSelectionLabel
Returns fake selection label.
Related:
-
Selection focus. Focus is a position where the selection ends.
Related:
-
isBackward : Boolean
module:engine/view/selection~Selection#isBackward
-
isCollapsed : Boolean
module:engine/view/selection~Selection#isCollapsed
Returns whether the selection is collapsed. Selection is collapsed when there is exactly one range which is collapsed.
-
isFake : Boolean
module:engine/view/selection~Selection#isFake
Returns true if selection instance is marked as
fake
.Related:
-
rangeCount : Number
module:engine/view/selection~Selection#rangeCount
Returns number of ranges in selection.
-
_lastRangeBackward : Boolean
module:engine/view/selection~Selection#_lastRangeBackward
protected
Specifies whether the last added range was added as a backward or forward range.
-
Stores all ranges that are selected.
-
_fakeSelectionLabel : String
module:engine/view/selection~Selection#_fakeSelectionLabel
private
Fake selection's label.
-
_isFake : Boolean
module:engine/view/selection~Selection#_isFake
private
Specifies whether selection instance is fake.
Methods
-
constructor( [ selectable ], [ placeOrOffset ], [ options ] = { [options.backward], [options.fake], [options.label] } )
module:engine/view/selection~Selection#constructor
Creates new selection instance.
Note: The selection constructor is available as a factory method:
-
UpcastWriter#createSelection()
.// Creates empty selection without ranges. const selection = writer.createSelection(); // Creates selection at the given range. const range = writer.createRange( start, end ); const selection = writer.createSelection( range ); // Creates selection at the given ranges const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ]; const selection = writer.createSelection( ranges ); // Creates selection from the other selection. const otherSelection = writer.createSelection(); const selection = writer.createSelection( otherSelection ); // Creates selection from the document selection. const selection = writer.createSelection( editor.editing.view.document.selection ); // Creates selection at the given position. const position = writer.createPositionFromPath( root, path ); const selection = writer.createSelection( position ); // Creates collapsed selection at the position of given item and offset. const paragraph = writer.createContainerElement( 'paragraph' ); const selection = writer.createSelection( paragraph, offset ); // Creates a range inside an element which starts before the // first child of that element and ends after the last child of that element. const selection = writer.createSelection( paragraph, 'in' ); // Creates a range on an item which starts before the item and ends // just after the item. const selection = writer.createSelection( paragraph, 'on' );
Selection
's constructor allow passing additional options (backward
,fake
andlabel
) as the last argument.// Creates backward selection. const selection = writer.createSelection( range, { backward: true } );
Fake selection does not render as browser native selection over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to the user and selection over elements can be represented in other way, for example by applying proper CSS class.
Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be properly handled by screen readers).
// Creates fake selection with label. const selection = writer.createSelection( range, { fake: true, label: 'foo' } );
Parameters
[ selectable ] : Selectable
[ placeOrOffset ] : Number | 'before' | 'end' | 'after' | 'on' | 'in'
Offset or place when selectable is an
Item
.[ options ] : Object
-
Properties
[ options.backward ] : Boolean
Sets this selection instance to be backward.
[ options.fake ] : Boolean
Sets this selection instance to be marked as
fake
.[ options.label ] : String
Label for the fake selection.
-
getFirstPosition() → Position | null
module:engine/view/selection~Selection#getFirstPosition
-
getFirstRange() → Range | null
module:engine/view/selection~Selection#getFirstRange
-
getLastPosition() → Position | null
module:engine/view/selection~Selection#getLastPosition
-
getLastRange() → Range | null
module:engine/view/selection~Selection#getLastRange
-
Returns an iterable that contains copies of all ranges added to the selection.
Returns
Iterable.<Range>
-
getSelectedElement() → Element | null
module:engine/view/selection~Selection#getSelectedElement
-
is( type ) → Boolean
module:engine/view/selection~Selection#is
Checks whether this object is of the given type.
selection.is( 'selection' ); // -> true selection.is( 'view:selection' ); // -> true selection.is( 'model:selection' ); // -> false selection.is( 'element' ); // -> false selection.is( 'range' ); // -> false
Check the entire list of view objects which implement the
is()
method.Parameters
type : String
Returns
Boolean
-
isEqual( otherSelection ) → Boolean
module:engine/view/selection~Selection#isEqual
Checks whether, this selection is equal to given selection. Selections are equal if they have same directions, same number of ranges and all ranges from one selection equal to a range from other selection.
Parameters
otherSelection : Selection | DocumentSelection
Selection to compare with.
Returns
Boolean
true
if selections are equal,false
otherwise.
-
isSimilar( otherSelection ) → Boolean
module:engine/view/selection~Selection#isSimilar
Checks whether this selection is similar to given selection. Selections are similar if they have same directions, same number of ranges, and all trimmed ranges from one selection are equal to any trimmed range from other selection.
Parameters
otherSelection : Selection | DocumentSelection
Selection to compare with.
Returns
Boolean
true
if selections are similar,false
otherwise.
-
setFocus( itemOrPosition, [ offset ] )
module:engine/view/selection~Selection#setFocus
Moves
focus
to the specified location.The location can be specified in the same form as view.createPositionAt() parameters.
Parameters
itemOrPosition : Item | Position
[ offset ] : Number | 'end' | 'before' | 'after'
Offset or one of the flags. Used only when first parameter is a view item.
Fires
-
setTo( selectable, [ placeOrOffset ], [ options ] = { [options.backward], [options.fake], [options.label] } )
module:engine/view/selection~Selection#setTo
Sets this selection's ranges and direction to the specified location based on the given selectable.
// Sets selection to the given range. const range = writer.createRange( start, end ); selection.setTo( range ); // Sets selection to given ranges. const ranges = [ writer.createRange( start1, end2 ), writer.createRange( star2, end2 ) ]; selection.setTo( range ); // Sets selection to the other selection. const otherSelection = writer.createSelection(); selection.setTo( otherSelection ); // Sets selection to contents of DocumentSelection. selection.setTo( editor.editing.view.document.selection ); // Sets collapsed selection at the given position. const position = writer.createPositionAt( root, path ); selection.setTo( position ); // Sets collapsed selection at the position of given item and offset. selection.setTo( paragraph, offset );
Creates a range inside an element which starts before the first child of that element and ends after the last child of that element.
selection.setTo( paragraph, 'in' );
Creates a range on an item which starts before the item and ends just after the item.
selection.setTo( paragraph, 'on' ); // Clears selection. Removes all ranges. selection.setTo( null );
Selection#setTo()
method allow passing additional options (backward
,fake
andlabel
) as the last argument.// Sets selection as backward. selection.setTo( range, { backward: true } );
Fake selection does not render as browser native selection over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to the user and selection over elements can be represented in other way, for example by applying proper CSS class.
Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be properly handled by screen readers).
// Creates fake selection with label. selection.setTo( range, { fake: true, label: 'foo' } );
Parameters
selectable : Selectable
[ placeOrOffset ] : Number | 'before' | 'end' | 'after' | 'on' | 'in'
Sets place or offset of the selection.
[ options ] : Object
-
Properties
[ options.backward ] : Boolean
Sets this selection instance to be backward.
[ options.fake ] : Boolean
Sets this selection instance to be marked as
fake
.[ options.label ] : String
Label for the fake selection.
Fires
-
_addRange( range, [ isBackward ] )
module:engine/view/selection~Selection#_addRange
private
Adds a range to the selection. Added range is copied. This means that passed range is not saved in the selection instance and you can safely operate on it.
Accepts a flag describing in which way the selection is made - passed range might be selected from start to end or from end to start. The flag is used to set anchor and focus properties.
Throws CKEditorError
view-selection-range-intersects
if added range intersects with ranges already stored in Selection instance.Parameters
range : Range
[ isBackward ] : Boolean
-
Defaults to
false
Fires
-
_pushRange( range )
module:engine/view/selection~Selection#_pushRange
private
Adds range to selection - creates copy of given range so it can be safely used and modified.
Throws CKEditorError
view-selection-range-intersects
if added range intersects with ranges already stored in selection instance.Parameters
range : Range
-
_setFakeOptions( [ options ] = { [options.fake], [options.label] } )
module:engine/view/selection~Selection#_setFakeOptions
private
Sets this selection instance to be marked as
fake
. A fake selection does not render as browser native selection over selected elements and is hidden to the user. This way, no native selection UI artifacts are displayed to the user and selection over elements can be represented in other way, for example by applying proper CSS class.Additionally fake's selection label can be provided. It will be used to describe fake selection in DOM (and be properly handled by screen readers).
Parameters
[ options ] : Object
Options.
Properties[ options.fake ] : Boolean
If set to true selection will be marked as
fake
.[ options.label ] : String
Fake selection label.
Defaults to
''
-
_setRanges( newRanges, [ isLastBackward ] )
module:engine/view/selection~Selection#_setRanges
private
Replaces all ranges that were added to the selection with given array of ranges. Last range of the array is treated like the last added range and is used to set anchor and focus. Accepts a flag describing in which way the selection is made.
Parameters
newRanges : Iterable.<Range>
Iterable object of ranges to set.
[ isLastBackward ] : Boolean
Flag describing if last added range was selected forward - from start to end (
false
) or backward - from end to start (true
). Defaults tofalse
.Defaults to
false
Events
-
change( eventInfo )
module:engine/view/selection~Selection#event:change
Fired whenever selection ranges are changed through Selection API.
Parameters
eventInfo : EventInfo
An object containing information about the fired event.
Every day, we work hard to keep our documentation complete. Have you spotted an outdated information? Is something missing? Please report it via our issue tracker.