SE のどこかで、Tim Down による contenteditable にテキストを挿入するコードを見つけました。コードは次のようになり、完璧に機能しています。しかし、私の要件に基づいて条件を追加したいので、コードを何らかの方法で変更したかったのですが、何度も試行錯誤した結果、それを行うことができませんでした。
function insertTextAtCursor(value, stepback) {
var sel, range, textNode;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
textNode = document.createTextNode(value);
//Check value of stepback: 0 or 1
if(!stepback)//if 0
range.insertNode(textNode);
if(stepback){ //if 1
// replace the previously inserted character with the new one here
}
// Move caret to the end of the newly inserted text node
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);
}
}
ここでは、0 または 1 のstepbackパラメータの値をチェックしています。0 の場合は押された文字が挿入されますが、1 の場合は最後の文字を新しい文字に置き換えたいと考えています。私の場合、キーが押された直後に母音が続くと (たとえば、m を押してから a を押すと)、ステップバックは 1 を返します。この条件を達成するためにコードを変更するにはどうすればよいですか? これを理解するために何日も費やしましたが、役に立ちませんでした。
ありがとう。