How to get nodes lying inside a range with javascript? How to get nodes lying inside a range with javascript? javascript javascript

How to get nodes lying inside a range with javascript?


Here's an implementation I came up with to solve this:

function getNextNode(node){    if (node.firstChild)        return node.firstChild;    while (node)    {        if (node.nextSibling)            return node.nextSibling;        node = node.parentNode;    }}function getNodesInRange(range){    var start = range.startContainer;    var end = range.endContainer;    var commonAncestor = range.commonAncestorContainer;    var nodes = [];    var node;    // walk parent nodes from start to common ancestor    for (node = start.parentNode; node; node = node.parentNode)    {        nodes.push(node);        if (node == commonAncestor)            break;    }    nodes.reverse();    // walk children and siblings from start until end is found    for (node = start; node; node = getNextNode(node))    {        nodes.push(node);        if (node == end)            break;    }    return nodes;}


The getNextNode will skip your desired endNode recursively if its a parent node.

Perform the conditional break check inside of the getNextNode instead:

var getNextNode = function(node, skipChildren, endNode){  //if there are child nodes and we didn't come from a child node  if (endNode == node) {    return null;  }  if (node.firstChild && !skipChildren) {    return node.firstChild;  }  if (!node.parentNode){    return null;  }  return node.nextSibling          || getNextNode(node.parentNode, true, endNode); };

and in while statement:

while (startNode = getNextNode(startNode, false , endNode));