Проверка позиции узла в дереве DOM: методы compareDocumentPosition() и contains()
Веб-страницы представляют собой деревья элементов HTML, известных как деревья DOM (Document Object Model). Когда вы работаете с веб-страницей с помощью JavaScript, иногда необходимо определить, находится ли один элемент внутри другого элемента или как он относится к другому элементу в дереве DOM.
Для этого можно использовать методы compareDocumentPosition() и contains(), которые позволяют сравнивать позиции узлов в дереве DOM.
Метод compareDocumentPosition() возвращает битовую маску, представляющую позицию одного элемента в отношении другого. Эта битовая маска может быть интерпретирована с помощью следующих значений:
- 1 — элемент находится вне дерева DOM
- 2 — элемент находится внутри элемента, но не является его потомком
- 4 — элемент является предком другого элемента, но не является его родительским элементом
- 8 — элемент является родительским элементом другого элемента
- 16 — элемент находится внутри другого элемента и является его потомком
- 32 — элемент идентичен другому элементу
Пример использования метода compareDocumentPosition():
const parentElement = document.querySelector('#parent');
const childElement = document.querySelector('#child');
const comparison = parentElement.compareDocumentPosition(childElement);
if (comparison & Node.DOCUMENT_POSITION_CONTAINED_BY) {
console.log('childElement находится внутри parentElement');
} else if (comparison & Node.DOCUMENT_POSITION_CONTAINS) {
console.log('parentElement находится внутри childElement');
} else {
console.log('childElement и parentElement находятся в разных ветвях дерева DOM');
}
Метод contains() проверяет, находится ли один элемент внутри другого элемента в дереве DOM. Он возвращает логическое значение true, если элемент содержит другой элемент, и false в противном случае.
Пример использования метода contains():
const parentElement = document.querySelector('#parent'); const childElement = document.querySelector('#child'); if (parentElement.contains(childElement)) { console.log('childElement находится внутри parentElement'); } else { console.log('childElement не находится внутри parentElement'); }
Оба эти метода могут быть полезны при выполнении различных операций на веб-странице с использованием JavaScript.