JavaScript Selection — виділений користувачем текст
Selection — те, що користувач виділив на сторінці. Дістається через window.getSelection().
Загальний опис
Найпростіше з нього беруть текст: String(selection) віддає виділений рядок. Цього досить для кнопки «поділитись цитатою» чи власного меню на виділення.
Глибше — це набір Range-діапазонів (getRangeAt(0)), і саме через них редактори роблять форматування: обгортають виділене в теґ, замінюють, вирізають.
Властивість isCollapsed каже, що виділення порожнє — тобто це просто курсор, а не діапазон. Перевіряти її варто завжди: без неї кнопки редактора спрацьовують на порожнечі.
- Порада
-
Подія
автор: NagarDselectionchangeнаdocumentдозволяє показувати панель форматування рівно тоді, коли щось виділили — і ховати, коли виділення зняли.
Синтаксис
const sel = window.getSelection();
методи
| Метод | Опис |
|---|---|
| getRangeAt | Повертає діапазон виділення за індексом. |
| removeAllRanges | Знімає виділення. |
| addRange | Додає діапазон до виділення. |
| toString | Виділений текст. |
| selectAllChildren | Виділяє всіх нащадків вузла. |
властивості
| Властивість | Опис |
|---|---|
| isCollapsed | Чи порожнє виділення (просто курсор). |
| rangeCount | Кількість діапазонів у виділенні. |
| anchorNode | Вузол, де виділення почалося. |
| focusNode | Вузол, де виділення закінчується. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Selection | 1+ | 1+ | 1+ | 7+ | 12+ | 9+ |
| Переглядач | ||||
|---|---|---|---|---|
| Selection | yes | yes | yes | yes |
Приклади
+ запропонувати свій приклад у пісочниці
Панель, що виринає на виділення тексту.
HTML
<p>Виділи будь-який фрагмент цього абзацу.</p>
JS
document.addEventListener('selectionchange', () => {
const selection = window.getSelection();
// порожнє виділення — це просто курсор
if (selection.isCollapsed) {
panel.hidden = true;
return;
}
const text = String(selection);
console.log('Виділено:', text, '(' + text.length + ' символів)');
// де саме виділення на екрані — щоб поставити панель поруч
const rect = selection.getRangeAt(0).getBoundingClientRect();
panel.style.top = (rect.top + window.scrollY - 40) + 'px';
panel.style.left = rect.left + 'px';
panel.hidden = false;
});
Коментарі
Коментарів ще немає — будьте першим!