Вы пробовали Node.compareDocumentPosition()
? Он возвращает битовую маску, представляющую отношение вызывающего узла к узлу, переданному в качестве аргумента. Причина в том, что это битовая маска, потому что она может представлять более одного из возможных отношений.
В этом случае вы можете использовать Node.DOCUMENT_POSITION_FOLLOWING
, чтобы определить порядок, в котором появляются два узла (результат этого фрагмента будет в консоли ниже вывода отрисованной страницы):
const foo1 = document.getElementById("foo1");
const foo2 = document.getElementById("foo2");
if (foo1.compareDocumentPosition(foo2) & Node.DOCUMENT_POSITION_FOLLOWING) {
console.log("foo2 follows foo1");
} else {
console.log("foo2 precedes foo1");
}
<div>
<p>
<span id="foo1">foo</span>
<span>bar</span>
</p>
<p>
<span id="foo2">foo</span>
<span>bar</span>
</p>
</div>
Широко поддерживается, как сообщает caniuse :
![enter image description here](https://i.stack.imgur.com/wEthQ.png)