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①

瀏覽器相容性

另見