Node.compareDocumentPosition

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Node.compareDocumentPosition() 可以比较当前节点与任意文档中的另一个节点的位置关系。

返回值是一个具有以下值的位掩码:

常量名 十进制值 含义
DOCUMENT_POSITION_DISCONNECTED 1 不在同一文档中
DOCUMENT_POSITION_PRECEDING 2 otherNode 在 node 之前
DOCUMENT_POSITION_FOLLOWING 4 otherNode 在 node 之后
DOCUMENT_POSITION_CONTAINS 8 otherNode 包含 node
DOCUMENT_POSITION_CONTAINED_BY 16 otherNode 被 node 包含
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC 32 待定

语法

js
compareDocumentPosition(otherNode)

参数

otherNode

用于比较位置的 Node

返回值

一个表示 NodeotherNodeDocument 中关系的整数值。在一些场景下,可能设置了不止一位比特值。比如 otherNode 在文档中是靠前的且包含了 Node, 那么DOCUMENT_POSITION_CONTAINSDOCUMENT_POSITION_PRECEDING 位都会设置,所以结果会是 0x0A 即十进制下的 10。

例子

js
var head = document.getElementsByTagName("head").item(0);
if (
  head.compareDocumentPosition(document.body) & Node.DOCUMENT_POSITION_FOLLOWING
) {
  console.log("well-formed document");
} else {
  console.log("<head> is not before <body>");
}

备注: 因为compareDocumentPosition返回的是一个位掩码,所以必须再使用按位与运算符才能得到有意义的值。

注意第一条语句使用了带有参数 0 的 NodeList.item() 方法,它和 getElementsByTagName('head')[0] 是一样的。

规范

Specification
DOM
# ref-for-dom-node-comparedocumentposition①

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
compareDocumentPosition

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

相关链接