JavaScript Selection — виділений користувачем текст


Selection — те, що користувач виділив на сторінці. Дістається через window.getSelection().

автор: NagarD

Загальний опис

Найпростіше з нього беруть текст: String(selection) віддає виділений рядок. Цього досить для кнопки «поділитись цитатою» чи власного меню на виділення.

Глибше — це набір Range-діапазонів (getRangeAt(0)), і саме через них редактори роблять форматування: обгортають виділене в теґ, замінюють, вирізають.

Властивість isCollapsed каже, що виділення порожнє — тобто це просто курсор, а не діапазон. Перевіряти її варто завжди: без неї кнопки редактора спрацьовують на порожнечі.

автор: NagarD

Порада

Подія selectionchange на document дозволяє показувати панель форматування рівно тоді, коли щось виділили — і ховати, коли виділення зняли.

автор: NagarD

Синтаксис

const sel = window.getSelection();

методи

Метод Опис
getRangeAt Повертає діапазон виділення за індексом.
removeAllRanges Знімає виділення.
addRange Додає діапазон до виділення.
toString Виділений текст.
selectAllChildren Виділяє всіх нащадків вузла.

властивості

Властивість Опис
isCollapsed Чи порожнє виділення (просто курсор).
rangeCount Кількість діапазонів у виділенні.
anchorNode Вузол, де виділення почалося.
focusNode Вузол, де виділення закінчується.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Selection 1+ 1+ 1+ 7+ 12+ 9+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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;
});
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід