。あなたのカーソルがテキストの最後にないと、物事がうまくいかないからです。カーソル位置を取得し、その位置にタブを挿入する必要があります。これらの問題に対処するために
、あなたはもう少しあなたのイベントハンドラを消費する必要があります。
$('[contenteditable]').on('keydown', function(e) {
if (e.which === 9) {
//prevent from tabbing out
e.preventDefault();
var ce = this;
var $ce = $(ce);
var html = $ce.html();
var textNode = ce.firstChild;
var range = document.createRange();
var position = getSelection().getRangeAt(0).startOffset;
//place tab at cursor position
$ce.html([html.slice(0, position), '	', html.slice(position)].join(''));
//reset cursor position and place it after the tab
ce.focus();
range.setStart(textNode, position + 1);
range.setEnd(textNode, position + 1);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
}
});
これが正しい位置にタブを置き、カーソルをリセットします。
実際のフィドルhereが表示されます。しかし、これは非常に初歩的なことであり、クロムでしか機能しない可能性が高いことに注意してください。他のブラウザのサポートについては、自分で見つけてください。また、タブ文字で開始して終了するエッジのケースはここでは失敗しますが、これは正しい方向に小さなナッジを与えます。
動作しません。私のコードで何か問題がありますか? ( 'keyUpイベント'、関数(E){ e.preventDefault()に\t \t
それは私のコードのようには見えません。 'keydown'、' preventDefault() 'は' if'の中にあります。 – PierreDuc
@cosmo私の答えは – PierreDuc