Selection 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');Методы
selection.findParentTag(tagName, className?)
HTMLElement | nullНайти родительский элемент текущего выделения, соответствующий тегу и, при необходимости, классу.
Когда использовать
Стандартный способ для строчных инструментов проверить, находится ли курсор уже внутри их тега (например, <a> для ссылки).
const bold = editor.selection.findParentTag('B');
if (bold) {
console.log('Selection is inside bold text');
}
const link = editor.selection.findParentTag('A', 'external-link');selection.expandToTag(node)
voidРасширить выделение на весь элемент.
Когда использовать
Расширяет выделение на весь элемент — обычно чтобы выделить существующую разметку перед заменой или удалением.
const element = editor.selection.findParentTag('B');
if (element) {
editor.selection.expandToTag(element);
// Now entire bold element is selected
}selection.setFakeBackground()
voidУстановить фейковый фон, имитирующий выделение, когда фокус уходит в сторону. Полезно для строчных инструментов.
Когда использовать
Сохраняет видимую подсветку «выделения», пока фокус уходит в поле вашего инструмента. Всегда сопровождайте последующим removeFakeBackground().
// Save selection visual before opening a modal
editor.selection.setFakeBackground();
// Open modal - selection stays visually highlightedselection.removeFakeBackground()
voidУбрать фейковый фон выделения.
Когда использовать
Убирает фейковую подсветку из setFakeBackground(); вызывайте при закрытии вашего строчного UI.
// After closing modal
editor.selection.removeFakeBackground();selection.clearFakeBackground()
voidОчистить всё состояние фейкового фона — и DOM-элементы, и внутренние флаги.
Когда использовать
Более полный сброс, чем removeFakeBackground() — очищает и DOM, и внутренние флаги, если состояние рассинхронизировалось.
// Full cleanup after undo/redo
editor.selection.clearFakeBackground();selection.save()
voidСохранить текущий диапазон выделения, чтобы восстановить его позже.
Когда использовать
Сохраните текущий диапазон перед уходом фокуса из документа (например, при открытии диалога), затем верните через restore().
// Save selection before moving focus
editor.selection.save();
// Do something that moves focus away...
// Restore selection
editor.selection.restore();selection.restore()
voidВосстановить ранее сохранённый диапазон выделения.
Когда использовать
Восстанавливает диапазон, сохранённый save() — цикл, позволяющий строчным инструментам пережить смену фокуса.
editor.selection.save();
// ... operations that move focus ...
editor.selection.restore();