javascript - 如何获取包含当前选择的 DOM 元素?

标签 javascript html dom selection

您可以用鼠标选择网页的一部分。

我知道我可以获得 currently selected text但是如何获取包含当前选择的开始或结束的 DOM 元素?

最佳答案

以下将返回当前选择的开始或结束边界的容器元素,使用 bool 值isStart 指定您是想要开始边界还是结束边界。它适用于大多数主流浏览器。添加功能测试以提高稳健性。

function getSelectionBoundaryElement(isStart) {
    var range, sel, container;
    if (document.selection) {
        range = document.selection.createRange();
        range.collapse(isStart);
        return range.parentElement();
    } else {
        sel = window.getSelection();
        if (sel.getRangeAt) {
            if (sel.rangeCount > 0) {
                range = sel.getRangeAt(0);
            }
        } else {
            // Old WebKit
            range = document.createRange();
            range.setStart(sel.anchorNode, sel.anchorOffset);
            range.setEnd(sel.focusNode, sel.focusOffset);

            // Handle the case when the selection was selected backwards (from the end to the start in the document)
            if (range.collapsed !== sel.isCollapsed) {
                range.setStart(sel.focusNode, sel.focusOffset);
                range.setEnd(sel.anchorNode, sel.anchorOffset);
            }
       }

        if (range) {
           container = range[isStart ? "startContainer" : "endContainer"];

           // Check if the container is a text node and return its parent if so
           return container.nodeType === 3 ? container.parentNode : container;
        }   
    }
}

关于javascript - 如何获取包含当前选择的 DOM 元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1335252/

相关文章:

javascript - 在 iframe 中获取 innerdiv 的 id

javascript - 如何过滤数组中的不同键并在angular js中获得唯一结果

Javascript - 使用 forEach 向后循环遍历数组

javascript - 即使使用最小高度,如何保持 div 中文本的间距不变(javascript)

javascript - 如何比较innerHTML(JavaScript中的字符串比较)

javascript - 特定元素之后的 querySelector

javascript - 不可打印字符的问题

html - Bootstrap2 容器最大宽度

html - 用Input Box填充剩下的DIV标签空间高度

gwt - 弹出面板显示在小部件下方