How to get nodes lying inside a range with javascript?

后端 未结 9 2117
被撕碎了的回忆
被撕碎了的回忆 2020-11-29 03:59

I\'m trying to get all the DOM nodes that are within a range object, what\'s the best way to do this?

var selection = window.getSelection(); //what the user          


        
9条回答
  •  被撕碎了的回忆
    2020-11-29 04:55

    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;
    }
    

提交回复
热议问题