JS метод Element.compareDocumentPosition()
Загальний опис
Метод compareDocumentPosition()
є корисним інструментом у JavaScript, який дозволяє порівнювати позиції елементів у DOM-дереві. Цей метод дозволяє визначити, чи є один елемент дочірнім, батьківським, нащадком чи сусіднім до іншого елемента. Він повертає числове значення, що кодує різні відносини між елементами, з якими ви можете працювати.
Основна суть методу compareDocumentPosition()
полягає в тому, що він надає можливість визначити відносини між елементами у DOM-структурі, що може бути корисним у випадках, коли вам потрібно взаємодіяти з різними елементами сторінки або визначати їхні взаємини.
Один з основних способів використання методу compareDocumentPosition()
- це визначення, чи є один елемент нащадком іншого. Наприклад:
const parentElement = document.getElementById('parent');
const childElement = document.getElementById('child');
const position = parentElement.compareDocumentPosition(childElement);
if (position & Node.DOCUMENT_POSITION_CONTAINED_BY) {
console.log('childElement є нащадком parentElement');
}
У цьому прикладі ми перевіряємо, чи є childElement
нащадком parentElement
, використовуючи метод compareDocumentPosition()
. Якщо результат містить Node.DOCUMENT_POSITION_CONTAINED_BY
, то це означає, що childElement
є нащадком parentElement
.
Крім того, метод compareDocumentPosition()
може бути використаний для визначення порядку елементів у DOM-структурі. Наприклад:
const element1 = document.getElementById('element1');
const element2 = document.getElementById('element2');
const position = element1.compareDocumentPosition(element2);
if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
console.log('element1 передує element2 у DOM');
} else if (position & Node.DOCUMENT_POSITION_PRECEDING) {
console.log('element1 слідує за element2 у DOM');
}
У цьому прикладі ми визначаємо, чи element1
слідує за element2
у DOM-структурі або передує йому, використовуючи метод compareDocumentPosition()
.
Загалом, метод compareDocumentPosition()
є потужним інструментом для порівняння позицій елементів у DOM-структурі. Він дозволяє вам взаємодіяти з елементами сторінки та визначати їхні взаємні відносини, що робить його корисним у широкому спектрі сценаріїв веб-розробки.
Порада: | Початківцям важливо зрозуміти, що метод |
Порада: | Досвідченим програмістам важливо пам'ятати, що |
Порада: | Порада для початківців: перед використанням |
Синтаксис
compareDocumentPosition(otherElement)
Параметри
- *
otherElement
Елемент, для якого потрібно повідомити позицію відносно даного елементу.
Return
Element
Повертає ціле значення, що представляє позицію
otherElement
відносно даного елементу як комбінацію флагів. Ці флаги відображають різні відносини між елементами, такі якDOCUMENT_POSITION_DISCONNECTED
,DOCUMENT_POSITION_PRECEDING
,DOCUMENT_POSITION_FOLLOWING
,DOCUMENT_POSITION_CONTAINS
,DOCUMENT_POSITION_CONTAINED_BY
, таDOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
. Більше одного біта встановлено, якщо застосовуються різні сценарії. Наприклад, якщоotherNode
знаходиться раніше у документі та містить елемент, на якому було викликаноcompareDocumentPosition()
, тоді встановлюються бітиDOCUMENT_POSITION_CONTAINS
таDOCUMENT_POSITION_PRECEDING
, що дає значення 10 (0x0A).
Переглядачі
Переглядач | |||||
---|---|---|---|---|---|
2 |
1 |
4 |
12.1 |
12 |
Переглядач | ||||
---|---|---|---|---|
37 |
18 |
4 |
3.2 |
Переглядач | ||
---|---|---|
- |
- |
Приклади
У цьому прикладі ми маємо два вузли (node1
та node2
) у контейнері. При натисканні кнопки "Порівняти вузли" виконується метод compareDocumentPosition()
, який порівнює позицію цих двох вузлів у дереві документа. Результат порівняння виводиться у <div>
з класом output
.
Користувач може взаємодіяти з прикладом, натискаючи на кнопку "Порівняти вузли". Це продемонструє використання методу compareDocumentPosition()
для визначення відносного розташування двох вузлів у дереві документа.
Метод compareDocumentPosition()
повертає бітову маску, яка вказує на різні можливі відносини між вузлами. У прикладі ми перевіряємо ці біти та формуємо відповідний текстовий опис відносного розташування вузлів.
Наприклад, якщо вузли не пов'язані між собою, буде виведено "Вузли не пов'язані між собою". Якщо Вузол 1 передує Вузлу 2, буде виведено "Вузол 1 передує Вузлу 2". Якщо Вузол 1 містить Вузол 2, буде виведено "Вузол 1 містить Вузол 2" і так далі.
Цей приклад демонструє, як використовувати метод compareDocumentPosition()
для визначення відносного розташування двох вузлів у дереві документа, а також ілюструє різні можливі відносини між вузлами.
У цьому простому прикладі ми використовуємо метод compareDocumentPosition()
для порівняння позиції двох елементів element1
та element2
. Метод повертає комбінований бітовий результат, який можна розшифрувати за допомогою значень констант Node.DOCUMENT_POSITION_FOLLOWING
та Node.DOCUMENT_POSITION_PRECEDING
, щоб визначити взаємне розташування елементів у документі.
// HTML розмітка
// <div id="element1">Element 1</div>
// <div id="element2">Element 2</div>
// JavaScript код
const element1 = document.getElementById("`element1`");
const element2 = document.getElementById("`element2`");
const position = element1.compareDocumentPosition(element2);
if (position & Node.DOCUMENT_POSITION_FOLLOWING) {
console.log("`element1` знаходиться перед `element2` у документі");
} else if (position & Node.DOCUMENT_POSITION_PRECEDING) {
console.log("`element1` знаходиться після `element2` у документі");
} else {
console.log("`element1` та `element2` знаходяться у різних гілках документа");
}
У цьому складнішому прикладі ми порівнюємо позиції елементів element1
та element2
відносно контейнера container
. Використовуючи метод compareDocumentPosition()
, ми визначаємо, чи один елемент знаходиться всередині іншого або чи один елемент містить інший. Цей приклад демонструє можливості використання методу compareDocumentPosition()
для визначення взаємного розташування елементів у складних структурах документа.
// HTML розмітка
// <div id="container">
// <div id="element1">Element 1</div>
// <div id="element2">Element 2</div>
// </div>
// JavaScript код
const container = document.getElementById("`container`");
const element1 = document.getElementById("`element1`");
const element2 = document.getElementById("`element2`");
const position1 = container.compareDocumentPosition(element1);
const position2 = container.compareDocumentPosition(element2);
if (position1 & Node.DOCUMENT_POSITION_CONTAINED_BY) {
console.log("`element1` знаходиться всередині `container`");
}
if (position2 & Node.DOCUMENT_POSITION_CONTAINS) {
console.log("`container` містить `element2`");
}