Estoy tratando de obtener todos los nodos DOM que están dentro de un objeto rango, ¿cuál es la mejor manera de hacerlo?¿Cómo obtener nodos dentro de un rango con javascript?
var selection = window.getSelection(); //what the user has selected
var range = selection.getRangeAt(0); //the first range of the selection
var startNode = range.startContainer;
var endNode = range.endContainer;
var allNodes = /*insert magic*/;
He estado pensando en una manera para que las últimas horas y se acercó con esto:
var getNextNode = function(node, skipChildren){
//if there are child nodes and we didn't come from a child node
if (node.firstChild && !skipChildren) {
return node.firstChild;
}
if (!node.parentNode){
return null;
}
return node.nextSibling
|| getNextNode(node.parentNode, true);
};
var getNodesInRange = function(range){
var startNode = range.startContainer.childNodes[range.startOffset]
|| range.startContainer;//it's a text node
var endNode = range.endContainer.childNodes[range.endOffset]
|| range.endContainer;
if (startNode == endNode && startNode.childNodes.length === 0) {
return [startNode];
};
var nodes = [];
do {
nodes.push(startNode);
}
while ((startNode = getNextNode(startNode))
&& (startNode != endNode));
return nodes;
};
Sin embargo, cuando el nodo final es el padre del nodo de inicio se vuelve todo en la página. Estoy seguro de que estoy pasando por alto algo obvio? O tal vez hacerlo de una manera totalmente incorrecta.
'var c = GetSelection() getRangeAt (0) .cloneContents().; c.querySelectorAll ('*') ' – caub