Caret API: перемещение и фокус курсора
Управление позицией курсора и выделением внутри редактора.
Как получить экземпляр редактора
Методы ниже вызываются на редакторе, созданном через new Blok(). Они доступны после того, как разрешится editor.isReady.
// You already hold the instance returned by the constructor.
const editor = new Blok({ holder: 'editor' });
await editor.isReady;
// Call any API method on it.
editor.caret.setToLastBlock('end');Методы
caret.setToFirstBlock(position?, offset?)
booleanSet caret to the first block with optional position and offset.
Когда использовать
position принимает 'start'/'end'/'default'; возвращает false, если приземляться некуда.
// Set to start of first block
editor.caret.setToFirstBlock('start');
// Set to end of first block with offset
editor.caret.setToFirstBlock('end', 5);caret.setToLastBlock(position?, offset?)
booleanSet caret to the last block with optional position and offset.
Когда использовать
Часто после добавления контента — ставит курсор в конец нового последнего блока через 'end'.
// Focus last block at end
editor.caret.setToLastBlock('end');
// Focus last block at start
editor.caret.setToLastBlock('start');caret.setToPreviousBlock(position?, offset?)
booleanMove caret to the previous block.
Когда использовать
Перемещает относительно блока в фокусе; возвращает false у верхнего края — используйте результат для определения границ.
editor.caret.setToPreviousBlock('end');
// Caret now at end of previous blockcaret.setToNextBlock(position?, offset?)
booleanMove caret to the next block.
Когда использовать
Зеркало setToPreviousBlock(); возвращает false у нижнего края.
editor.caret.setToNextBlock('start');
// Caret now at start of next blockcaret.setToBlock(blockOrIdOrIndex, position?, offset?)
booleanSet caret to a specific block by BlockAPI, ID, or index.
Когда использовать
Самый гибкий метод — цель по BlockAPI, id или индексу. Предпочитайте id/BlockAPI индексу, который смещается при перемещении блоков.
Параметры
| Параметр | Тип | Обязательный | По умолчанию | Описание |
|---|---|---|---|---|
blockOrIdOrIndex | BlockAPI | string | number | Обязательный | — | Целевой блок: экземпляр BlockAPI, id блока или числовой индекс. |
position | 'start' | 'end' | 'default' | — | 'default' | Куда внутри блока поставить курсор. |
offset | number | — | 0 | Смещение символов от position внутри целевого поля ввода. |
Ошибки
blockOrIdOrIndexне указывает на существующий блок (неизвестный id или индекс вне диапазона).(no error thrown — the call returns false)
Проверяйте булево значение результата —
setToBlock()никогда не выбрасывает ошибку, иfalseединственный признак того, что блок не найден.
// By index
editor.caret.setToBlock(0, 'end');
// → true if the caret moved, false if the target block doesn't exist
// By ID
editor.caret.setToBlock('block-123', 'start');
// By BlockAPI (getById can return null, so guard it)
const block = editor.blocks.getById('block-123');
if (block) {
editor.caret.setToBlock(block);
}caret.focus(atEnd?)
booleanSet focus to the editor, optionally at the end of content.
Когда использовать
Лёгкий способ сфокусировать редактор без выбора блока; true — в конец. То же, что focus() верхнего уровня.
// Focus at start
editor.caret.focus();
// Focus at end
editor.caret.focus(true);caret.updateLastCaretAfterPosition()
voidUpdate the "after" position of the most recent caret undo entry. Use after async caret movements.
Когда использовать
Вызывайте после асинхронного перемещения курсора, чтобы отмена ставила курсор туда, где оказался пользователь, а не где началась операция.
// After moving caret asynchronously
requestAnimationFrame(() => {
editor.caret.setToBlock(0);
editor.caret.updateLastCaretAfterPosition();
});