How to get range of characters between @ and caret in contenteditable

前端 未结 1 1621
萌比男神i
萌比男神i 2021-01-25 23:57

I have a contenteditable div and it contains other tags and not only plain text. Only one @ is allowed in. How can I get the range of the characters between @ and caret if such

相关标签:
1条回答
  • 2021-01-26 00:34

    Ha that was easier than I thought!. Based on this easy to overlook question: Div "contenteditable" : get and delete word preceding caret I forked its jsfiddle and here is mine working as expected:

    http://jsfiddle.net/52m2thu2/1/

    function getWordBetweenAtAndCaret(containerEl) {
        var preceding = "",
            sel,
            range,
            precedingRange;
        if (window.getSelection) {
            sel = window.getSelection();
            if (sel.rangeCount > 0) {
                range = sel.getRangeAt(0).cloneRange();
                range.collapse(true);
                range.setStart(containerEl, 0);
                preceding = range.toString();
            }
        } else if ((sel = document.selection) && sel.type != "Control") {
            range = sel.createRange();
            precedingRange = range.duplicate();
            precedingRange.moveToElementText(containerEl);
            precedingRange.setEndPoint("EndToStart", range);
            preceding = precedingRange.text;
        }
        var lastWord = preceding.match(/@(.+)$/i);
        if (lastWord) {
            return lastWord;
        } else {
            return false;
        }
    }
    
    0 讨论(0)
提交回复
热议问题