@garykac: This looks great!!!
One comment though:
I can see that from the perspective of the browser, what you are describing is a “static” range, because you don’t need to use any extra computing power on updating the range information after it has been created.
 Although it must be noted that it is not that difficult to create an entirely “static” range description by exchanging the node with a static description of how to get to the node from a given ancestor node.