代码之家  ›  专栏  ›  技术社区  ›  Murali VP

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

  •  10
  • Murali VP  · 技术社区  · 16 年前

    2 回复  |  直到 16 年前
        1
  •  18
  •   Tim Down    16 年前

    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;
            }   
        }
    }
    
        2
  •  3
  •   Justin Tanner    8 年前

    您也可以使用 Rangy

    elementAtCursor = rangy.getSelection().anchorNode.parentNode