选择和范围对象Contenteditable div

时间:2013-10-22 13:20:57

标签: javascript textarea contenteditable

我有类似here的要求。我正在研究一些与埃塞俄比亚语言有关的项目,名为Amharic。该项目涉及自动将拉丁字符翻译成他们在按键上的埃塞俄比亚字母。在阿姆哈拉语中,每个拉丁字符(如t,m,n,...)都映射到至少7个字符。例如,字母t可以映射到7个埃塞俄比亚字母系列(ተቱቲታቴትቶ)。在这里当你只需按t它将被映射到ት,当你按下字母t后跟e时,它将被映射到ተ。当您按下字母t后跟i时,它将映射到ቲ,依此类推。我已经尝试过Tim Down的答案,其中部分工作在我的案例中。至少文本被插入相对于光标的适当位置。但是,提供的解决方案仅在我按下第一个字母(例如t)时有效,但是当我尝试按t后跟元音(a,e,i,o,u)时,它首先显示核心映射的字母(带有t) )然后用t和a映射的字母。这与textarea完美配合,但无法使用contentEditable div。我的项目类似于here给出的项目。

我试图按如下方式修改答案,但仍然无法将curso移到最后。

function insertTextAtCursor(text, value, stepback) {
    var sel, range, textNode;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();
            textNode = document.createTextNode(text);
            range.insertNode(textNode);
            // Move caret to the end of the newly inserted text node   
             range.setStart(textNode, textNode.length-stepback+value);
            range.setEnd(textNode, textNode.length);                
            //range.collapse(false);
            // range.setStart(textNode, textNode.length);
            //range.setEnd(textNode, textNode.length);
            sel.removeAllRanges();
            sel.addRange(range);     

        }
    } else if (document.selection && document.selection.createRange) {
        range = document.selection.createRange();
        range.pasteHTML(text);
    }
}

您能否帮我解决一下如何修改Tim提供的解决方案以解决问题?

0 个答案:

没有答案