简体   繁体   English

如何在contenteditable中获取@和插入号之间的字符范围

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

I have a contenteditable div and it contains other tags and not only plain text. 我有一个contenteditable div,它包含其他标签,而不仅仅是纯文本。 Only one @ is allowed in. How can I get the range of the characters between @ and caret if such a range exists? 只能输入一个@。如果存在这样的范围,如何获取@和插入符号之间的字符范围?

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: 基于这个容易忽略的问题: Div“ contenteditable”:在插入符号前获取和删除单词,我派生了它的jsfiddle,这是我的预期工作:

http://jsfiddle.net/52m2thu2/1/ 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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM