Проверка на вложенность и порядок узлов
// Проверка на вложенность
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