Node:compareDocumentPosition() 方法

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

Node 接口的 compareDocumentPosition() 方法会报告其参数节点相对于调用该方法的节点的位置。

语法

js
compareDocumentPosition(otherNode)

参数

otherNode

需要报告其相对于 node 位置的 Node

返回值

一个表示 otherNode 相对于 node 位置的整数值,它是 位掩码,结合了 Node 的以下常量属性:

Node.DOCUMENT_POSITION_DISCONNECTED (1)

两个节点位于不同的文档中,或者位于同一文档中的不同树结构里。

Node.DOCUMENT_POSITION_PRECEDING (2)

在包含两个节点的树的 先序深度优先遍历 中,otherNode 排在 node 之前(例如,作为祖先节点、前一个同级节点、前一个同级节点的子节点,或祖先节点的前一个同级节点),或者(如果它们不连接)以任意但一致的顺序排在 node 之前。

Node.DOCUMENT_POSITION_FOLLOWING (4)

在包含两个节点的树的 先序深度优先遍历 中,otherNode 排在 node 之后(例如,作为子节点、后一个同级节点、后一个同级节点的子节点,或祖先节点的后一个同级节点),或者(如果它们不连接)以任意但一致的顺序排在 node 之后。

Node.DOCUMENT_POSITION_CONTAINS (8)

otherNodenode 的祖先节点。

Node.DOCUMENT_POSITION_CONTAINED_BY (16)

otherNodenode 的后代节点。

Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC (32)

结果依赖于任意和/或特定于实现的行为,不保证可移植性。

可以设置零个或多个位,具体取决于适用的场景。例如,如果 otherNode 在文档中的位置更靠前并且包含了调用 compareDocumentPosition() 的节点,那么 DOCUMENT_POSITION_CONTAINSDOCUMENT_POSITION_PRECEDING 这两个位都会被设置,产生值为 10 (0x0A)。

示例

js
const head = document.head;
const body = document.body;

if (head.compareDocumentPosition(body) & Node.DOCUMENT_POSITION_FOLLOWING) {
  console.log("Well-formed document");
} else {
  console.error("<head> is not before <body>");
}

注意: 因为 compareDocumentPosition() 返回的结果是一个位掩码,所以必须使用 按位与运算符 才能获得有意义的结果。

规范

规范
DOM
# ref-for-dom-node-comparedocumentposition①

浏览器兼容性

另见