1

我有一个类似的要求,就像这里给出的一样. 我正在做一些与埃塞俄比亚语言相关的项目,称为阿姆哈拉语。该项目涉及在按键上自动将拉丁字符翻译成他们的埃塞俄比亚字母。在阿姆哈拉语中,每个拉丁字符(如 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 搭配使用。我的项目与给定的项目相似在这里

我已尝试按如下方式修改答案,但仍无法将光标移至末尾。

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 提供的解决方案以适应问题?

4

0 回答 0