节点:compareDocumentPosition() 方法

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

语法

js
compareDocumentPosition(otherNode)

参数

otherNode

要报告其位置的 Node,相对于该节点。

返回值

一个整数,表示 otherNode 相对于 node 的位置,作为 位掩码,组合了 Node 的以下常量属性

Node.DOCUMENT_POSITION_DISCONNECTED (1)

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

Node.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)

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

根据适用的场景,可以设置零个或多个位。例如,如果 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①

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

参见