genbodev2
4/7/2017 - 3:18 PM

Проверка на вложенность и порядок узлов

Проверка на вложенность и порядок узлов

// Проверка на вложенность
var result = parent.contains(child);
// Возвращает true, если parent содержит child или parent == child

// Порядок узлов
var result = nodeA.compareDocumentPosition(nodeB);
// Возвращает битовую маску
// 000000	0	nodeA и nodeB - один и тот же узел
// 000001	1	Узлы в разных документах (или один из них не в документе)
// 000010	2	nodeB предшествует nodeA (в порядке обхода документа)
// 000100	4	nodeA предшествует nodeB
// 001000	8	nodeB содержит nodeA
// 010000	16	nodeA содержит nodeB
// 100000	32	Зарезервировано для браузера

// Есть вариации, например, 10100 - это 001000 и 000100 одновременно

// Перевести десятичное 20 в двоичную систему
20..toString(2);

// Побитовое сравнение
if (body.compareDocumentPosition(li) & 16) {
    alert( body + ' содержит ' + li );
}

// body.compareDocumentPosition(li) дает 20 или в двоичной 10100
// 16 в двоичной это 10000
// Побитовое сравнение
// 10100
// 10000
// 10000 => 1, т.е. true