当前位置:  开发笔记 > 编程语言 > 正文

如何使用Javascript在浏览器的可编辑内容窗口中找到光标处的DOM节点?

如何解决《如何使用Javascript在浏览器的可编辑内容窗口中找到光标处的DOM节点?》经验,为你挑选了1个好方法。

我正在寻找一种跨浏览器的解决方案,即IE,Firefox和Safari.



1> Tim Down..:

通过"可编辑的内容窗口",我将假设您的意思是contenteditable打开的元素或打开的文档designMode.

还有两种情况需要考虑:用户进行选择的情况和只有插入符号的情况.下面的代码将适用于这两种情况,并将为您提供完全包含选择的最内层元素.如果选择完全包含在文本节点中,那么在IE中获取该文本节点(在其他浏览器中是微不足道的)有点复杂,所以我没有在这里提供该代码.如果你需要它,我可以把它挖出来.

function getSelectionContainerElement() {
    var range, sel, container;
    if (document.selection && document.selection.createRange) {
        // IE case
        range = document.selection.createRange();
        return range.parentElement();
    } else if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt) {
            if (sel.rangeCount > 0) {
                range = sel.getRangeAt(0);
            }
        } else {
            // Old WebKit selection object has no getRangeAt, so
            // create a range from other selection properties
            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.commonAncestorContainer;

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

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有