A (Browser) Range implementation / wrapper with XPath features, extracted from Annotator

Downloads in past


1.1.18 years ago10 years agoMinified + gzip package size for xpath-range in KB


XPath Range
Build Status NPM Package Coverage
This module is for describing and resolving a DOM Range using XPath.


Using npm:
npm install xpath-range


The module provides functions for converting to and from DOM Range objects using a combination of XPath expressions and text offsets.
The presence of a working XPath evaluator is not strictly required. Without it, the library will only support XPath expressions that use a child axis and node names with number literal positions. All XPath expressions generated by this library fit this description. For instance, the library can generate and consume an expression like /html/body/article/p[3].


fromRange(range, [root])

Convert a Range to a pair of XPath expressions and offsets.
If the optional parameter root is supplied, the computed XPath expressions will be relative to it.
Returns an object with the following properties:
- start - startOffset - end - endOffset

toRange(start, startOffset, end, endOffset, [root])

Construct a Range from the given XPath expressions and offsets.
If the optional parameter root is supplied, the XPath expressions are evaluated as relative to it.
Returns a Range object.


This library should work with any browser implementing basic Range support.

Internet Explorer version 8

  • Basic support can be achieved with the rangy shim.
  • There is no support for namespaces in X(HT)ML documents (issue #17).


Originally, this code was part of the Annotator project.
Any discussion should happen on the annotator-dev mailing list.


To contribute, fork this repository and send a pull request with your changes, including any necessary test and documentation updates.


You can run the command-line test suite by executing npm test.
To run the test suite, install the karma test runner with the command npm install -g karma-cli and then run karma start. Karma will print instructions for debugging the tests in a browser.
rangy: https://github.com/timdown/rangy "rangy"