J'essaie d'obtenir tous les nœuds DOM qui se trouvent dans un objet Range, quelle est la meilleure façon de le faire?Comment obtenir des nœuds se trouvant dans une plage avec 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*/;
J'ai pensé à un moyen pour les dernières heures et est venu avec ceci:
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;
};
Toutefois, lorsque le noeud final est le parent du nœud de départ, il retourne tout sur la page. Je suis sûr que je néglige quelque chose d'évident? Ou peut-être y va-t-il totalement dans le mauvais sens.
'var c = getSelection() getRangeAt (0) .cloneContents(). c.querySelectorAll ('*') ' – caub