Range: compareBoundaryPoints() method

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

The compareBoundaryPoints() method of the Range interface compares the boundary points of the Range with those of another range.

Syntax

js
compareBoundaryPoints(how, otherRange)

Parameters

how

A constant describing the comparison method:

  • Range.END_TO_END compares the end boundary-point of this Range to the end boundary-point of otherRange.
  • Range.END_TO_START compares the start boundary-point of this Range to the end boundary-point of otherRange.
  • Range.START_TO_END compares the end boundary-point of this Range to the start boundary-point of otherRange.
  • Range.START_TO_START compares the start boundary-point of this Range to the start boundary-point of otherRange.
otherRange

A Range to compare boundary points with the range.

Return value

A number.

  • -1 if the specified boundary-point of this Range is before the specified boundary-point of otherRange.
  • 0 if the specified boundary-point of this Range is the same as the specified boundary-point of otherRange.
  • 1 if the specified boundary-point of this Range is after the specified boundary-point of otherRange.

This API is consistent with the general convention that, when comparing A to B, a negative number means A comes before B and vice versa (see for example Array.prototype.sort()). The ranges are compared in the direction of this to other, the same as String.prototype.localeCompare(). However, the boundary points are specified in the reverse order for the how parameter: END_TO_START compares the start of this to the end of other.

Exceptions

NotSupportedError DOMException

Thrown if the value of the how parameter is invalid.

Examples

Below, we create two ranges on the same text node and compare their different boundary points.

js
const text = new Text("0123456789");

const thisRange = new Range();
thisRange.setStart(text, 1);
thisRange.setEnd(text, 6);

const otherRange = new Range();
otherRange.setStart(text, 1);
otherRange.setEnd(text, 4);

// The ranges look like this:
// thisRange start   v---------v thisRange end
//                  0 1 2 3 4 5 6 7 8 9
// otherRange start  ^-----^ otherRange end

// this start is *same as* other start
thisRange.compareBoundaryPoints(Range.START_TO_START, otherRange); // 0

// this end is *after* other start
thisRange.compareBoundaryPoints(Range.START_TO_END, otherRange); // 1

// this start is *after* other end
thisRange.compareBoundaryPoints(Range.END_TO_START, otherRange); // -1

// this end is *after* other end
thisRange.compareBoundaryPoints(Range.END_TO_END, otherRange); // 1

Specifications

Specification
DOM
# dom-range-compareboundarypoints

Browser compatibility

desktop mobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
compareBoundaryPoints
Chrome – Full support
Chrome 1 (Release date: 2008-12-11)
footnote Full support
Edge – Full support
Edge 12 (Release date: 2015-07-29)
footnote Full support
Firefox – Full support
Firefox 1 (Release date: 2004-11-09)
footnote Full support
Opera – Full support
Opera 9 (Release date: 2006-06-20)
footnote Full support
Safari – Full support
Safari 1 (Release date: 2003-06-23)
footnote Full support
Chrome Android – Full support
Chrome Android 18 (Release date: 2012-06-27)
footnote Full support
Firefox for Android – Full support
Firefox for Android 4 (Release date: 2011-03-29)
footnote Full support
Opera Android – Full support
Opera Android 10.1 (Release date: 2010-11-09)
footnote Full support
Safari on iOS – Full support
Safari on iOS 1 (Release date: 2007-06-29)
footnote Full support
Samsung Internet – Full support
Samsung Internet 1 (Release date: 2013-04-27)
footnote Full support
WebView Android – Full support
WebView Android 4.4 (Release date: 2013-12-09)
footnote Full support
WebView on iOS – Full support
WebView on iOS 1 (Release date: 2007-06-29)
footnote Full support

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

See also