getNextNode пропустит Ваш желаемый endNode рекурсивно, если это будет родительский узел.
Выполните проверку условного разрыва в getNextNode вместо этого:
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);
};
и в в то время как оператор:
while (startNode = getNextNode(startNode, false , endNode));