Cómo obtener todos los elementos que están resaltados.

Quiero obtener todos los elementos en un área resaltada por el usuario. El problema es que no sé cómo atravesar diferentes partes del DOM, cuando los elementos están en una parte diferente del árbol. Mi código hasta el momento solo puede sacar los elementos del startContainer del rango de selección. ¿Necesito algún tipo de recursión? Aquí está mi código:

    getSelectedElementTags:function() 
{
    var range, sel, container;
    sel = content.window.getSelection();
    if (sel.getRangeAt) 
    {
        if (sel.rangeCount > 0) 
        {
            range = sel.getRangeAt(0);              
        }
    } 
    else 
    {       
        range = content.window.createRange();
        range.setStart(sel.anchorNode, sel.anchorOffset);
        range.setEnd(sel.focusNode, sel.focusOffset);
        alert("range created");
    }


    if (range)
    {
        container = range["startContainer"];
        var elms = container.parentNode.getElementsByTagName("*");          
        elmlist = "parent: "+container.parentNode.tagName + " (" + elms.length + ")\n";
        for (i in elms)
        {
            if (elms[i].tagName != null)
            {
                elmlist += elms[i].tagName+"\n";
            }
        }

        alert(elmlist);
    }
},

Respuestas a la pregunta(1)

Su respuesta a la pregunta