Range:compareNode() 方法

已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

Range 接口的 compareNode() 方法返回一个常量,指示 Node 的位置。

语法

js
compareNode(referenceNode)

参数

referenceNode

要与 Range 比较的 Node

返回值

指示 Node 位置的常量。可能的值是:

NODE_BEFORE (0)

节点在 Range 之前开始

NODE_AFTER (1)

节点在 Range 之后结束

NODE_BEFORE_AND_AFTER (2)

节点在 Range 之前开始,并在 Range 之后结束

NODE_INSIDE (3)

节点在 Range 之后开始,并在 Range 之前结束,也就是说,节点被 Range 完全选中。

示例

js
range = document.createRange();
range.selectNode(document.getElementsByTagName("div").item(0));
returnValue = range.compareNode(document.getElementsByTagName("p").item(0));

注意

此方法不是标准方法。可以使用以下函数作为替代。

js
function rangeCompareNode(range, node) {
  const nodeRange = node.ownerDocument.createRange();
  try {
    nodeRange.selectNode(node);
  } catch (e) {
    nodeRange.selectNodeContents(node);
  }
  const nodeIsBefore =
    range.compareBoundaryPoints(Range.START_TO_START, nodeRange) === 1;
  const nodeIsAfter =
    range.compareBoundaryPoints(Range.END_TO_END, nodeRange) === -1;

  if (nodeIsBefore && !nodeIsAfter) return 0;
  if (!nodeIsBefore && nodeIsAfter) return 1;
  if (nodeIsBefore && nodeIsAfter) return 2;

  return 3;
}

规范

此方法不是标准方法,因此不属于任何规范。

浏览器兼容性

另见