范围:compareNode() 方法

已弃用:此功能不再推荐。虽然某些浏览器可能仍然支持它,但它可能已从相关的 Web 标准中删除,也可能正在被删除,或者可能只是为了兼容性目的而保留。避免使用它,并尽可能更新现有代码;请参阅本页面底部的兼容性表,以指导你的决策。请注意,此功能可能随时停止工作。

非标准:此功能是非标准的,并且不在标准化轨道上。不要在面向 Web 的生产站点上使用它:它不会对每个用户都起作用。实现之间也可能存在很大的不兼容性,并且行为将来可能会改变。

Range.compareNode()返回一个常量,指示Node的位置。

可能的值是

NODE_BEFORE (0)

节点在范围之前开始

NODE_AFTER (1)

节点在范围之后结束

NODE_BEFORE_AND_AFTER (2)

节点在范围之前开始并在范围之后结束

NODE_INSIDE (3)

节点在范围之后开始并在范围之前结束,即节点完全被范围选中。

警告:此方法已从Gecko 1.9中删除,并且在 Firefox 的未来版本中将不存在,Firefox 是唯一实现它的浏览器;你应该尽快切换到Range.compareBoundaryPoints()

以下函数可以用作替代

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;
}

语法

js
compareNode(referenceNode)

参数

referenceNode

要与Range比较的Node

返回值

一个常量,指示Node的位置。

示例

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

注释

此方法已过时;你应该使用 W3C DOM Range.compareBoundaryPoints() 方法。

规范

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

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅