Range: compareNode() method
Deprecated
Avoid using this feature in new projects. This feature may be a candidate for removal from web standards or browsers.>
Non-standard: This feature is not standardized. We do not recommend using non-standard features in production, as they have limited browser support, and may change or be removed. However, they can be a suitable alternative in specific cases where no standard option exists.
The compareNode() method of the Range interface returns a constant indicating the
position of the Node.
Syntax
compareNode(referenceNode)
Parameters
referenceNode-
The
Nodeto compare with theRange.
Return value
A constant indicating the position of the Node. The possible values are:
NODE_BEFORE(0)-
Node starts before the Range
NODE_AFTER(1)-
Node ends after the Range
NODE_BEFORE_AND_AFTER(2)-
Node starts before and ends after the Range
NODE_INSIDE(3)-
Node starts after and ends before the Range, i.e., the Node is completely selected by the Range.
Examples
range = document.createRange();
range.selectNode(document.getElementsByTagName("div").item(0));
returnValue = range.compareNode(document.getElementsByTagName("p").item(0));
Notes
This method is non-standard. The following function can be used as replacement:
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;
}
Specifications
This method is not standard and therefore not part of any specification.