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