JavaScript Range — довільний діапазон у документі
Range (у перекладі — діапазон) описує ділянку документа між двома точками — навіть якщо ці точки стоять посеред тексту.
Загальний опис
DOM-методи мислять вузлами цілком, а діапазон — точками: «від третього символу цього абзацу до другого символу наступного». Саме так влаштоване виділення мишею, і саме тому Range лежить в основі всіх текстових редакторів.
Що з ним роблять: беруть вміст (cloneContents()), вирізають (extractContents()), обгортають виділене в теґ (surroundContents() — так працює кнопка «жирний»), міряють положення на екрані (getBoundingClientRect()).
Поточне виділення користувача — це набір діапазонів, який віддає Selection.
Синтаксис
const range = document.createRange();
властивості
| Властивість | Опис |
|---|---|
| collapsed | Чи порожній діапазон (початок = кінець). |
| startContainer | Вузол, де починається діапазон. |
| endContainer | Вузол, де закінчується діапазон. |
| commonAncestorContainer | Найближчий спільний предок меж діапазону. |
методи
| Метод | Опис |
|---|---|
| setStart | Задає початок діапазону. |
| setEnd | Задає кінець діапазону. |
| selectNode | Охоплює вузол цілком. |
| selectNodeContents | Охоплює вміст вузла. |
| cloneContents | Копіює вміст діапазону у DocumentFragment. |
| deleteContents | Видаляє вміст діапазону з документа. |
| insertNode | Вставляє вузол на початок діапазону. |
| getBoundingClientRect | Прямокутник діапазону у координатах вікна. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Range | 1+ | 1+ | 1+ | 7+ | 12+ | 9+ |
| Переглядач | ||||
|---|---|---|---|---|
| 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();
});
Коментарі
Коментарів ще немає — будьте першим!