JavaScript Range — довільний діапазон у документі


Range (у перекладі — діапазон) описує ділянку документа між двома точками — навіть якщо ці точки стоять посеред тексту.

автор: NagarD

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

DOM-методи мислять вузлами цілком, а діапазон — точками: «від третього символу цього абзацу до другого символу наступного». Саме так влаштоване виділення мишею, і саме тому Range лежить в основі всіх текстових редакторів.

Що з ним роблять: беруть вміст (cloneContents()), вирізають (extractContents()), обгортають виділене в теґ (surroundContents() — так працює кнопка «жирний»), міряють положення на екрані (getBoundingClientRect()).

Поточне виділення користувача — це набір діапазонів, який віддає Selection.

автор: NagarD

Синтаксис

const range = document.createRange();

властивості

Властивість Опис
collapsed Чи порожній діапазон (початок = кінець).
startContainer Вузол, де починається діапазон.
endContainer Вузол, де закінчується діапазон.
commonAncestorContainer Найближчий спільний предок меж діапазону.

методи

Метод Опис
setStart Задає початок діапазону.
setEnd Задає кінець діапазону.
selectNode Охоплює вузол цілком.
selectNodeContents Охоплює вміст вузла.
cloneContents Копіює вміст діапазону у DocumentFragment.
deleteContents Видаляє вміст діапазону з документа.
insertNode Вставляє вузол на початок діапазону.
getBoundingClientRect Прямокутник діапазону у координатах вікна.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Range 1+ 1+ 1+ 7+ 12+ 9+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
Range yes yes yes yes

Приклади

+ запропонувати свій приклад у пісочниці

Обгорнути виділений користувачем текст у .

HTML

<p id="text">Виділи частину цього тексту й натисни кнопку.</p>
<button id="mark">Підсвітити</button>

JS

document.getElementById('mark').addEventListener('click', () => {
    const selection = window.getSelection();

    if (selection.isCollapsed) {
        return; // нічого не виділено
    }

    const range = selection.getRangeAt(0);

    const highlight = document.createElement('mark');
    // саме так працює кнопка «жирний» у редакторах
    range.surroundContents(highlight);

    selection.removeAllRanges();
});
автор: NagarD

Коментарі

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

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

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

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

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

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

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

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

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

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

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