Get caret index in contenteditable div including tags

前端 未结 2 2006
遥遥无期
遥遥无期 2020-11-27 05:41

I have a contentEditable div in which I have multiple tags (br, b, u, i) and text.

I need

2条回答
  •  孤独总比滥情好
    2020-11-27 06:07

    Have you tried this? Get a range's start and end offset's relative to its parent container

    Direct link to the jsfiddle: https://jsfiddle.net/TjXEG/1/

    Function code:

    function getCaretCharacterOffsetWithin(element) {
        var caretOffset = 0;
        if (typeof window.getSelection != "undefined") {
            var range = window.getSelection().getRangeAt(0);
            var preCaretRange = range.cloneRange();
            preCaretRange.selectNodeContents(element);
            preCaretRange.setEnd(range.endContainer, range.endOffset);
            caretOffset = preCaretRange.toString().length;
        } else if (typeof document.selection != "undefined" && document.selection.type != "Control") {
            var textRange = document.selection.createRange();
            var preCaretTextRange = document.body.createTextRange();
            preCaretTextRange.moveToElementText(element);
            preCaretTextRange.setEndPoint("EndToEnd", textRange);
            caretOffset = preCaretTextRange.text.length;
        }
        return caretOffset;
    }
    
    function showCaretPos() {
        var el = document.getElementById("test");
        var caretPosEl = document.getElementById("caretPos");
        caretPosEl.innerHTML = "Caret position: " + getCaretCharacterOffsetWithin(el);
    }
    
    document.body.onkeyup = showCaretPos;
    document.body.onmouseup = showCaretPos;
    

提交回复
热议问题