5

以下のtxtToIns変数で表されるUnicode文字をテキストの本文に動的に挿入するための次のJavaScriptがあります。

elmt.value = elmt.value.substring(0, elmt.selectionStart) + txtToIns + " " + elmt.value.substring(elmt.selectionStart, elmt.selectionEnd) + elmt.value.substring(elmt.selectionEnd, elmt.value.length) + " ";
elmt.focus();
elmt.value = elmt.value.trim();

上記の場合、カーソルは常にテキストの最後にあります。txtToInsの直後に配置する方法はありますか?いいえ、txtToIns.focus()は機能しません

4

2 に答える 2

10

textarea値のスペース文字、特に2行後に再び削除される最後の文字で何をしようとしているのかわからないため、以下のコードのスペースは無視しました。また、以前に選択したテキスト(存在する場合)をどのように処理しようとしているのかわからないため、新しいテキストで上書きすることを想定します。

これはIE<9では機能しないことに注意してください。IE<9はselectionStartselectionEndまたはをサポートしていませんsetSelectionRange()

デモ: http: //jsfiddle.net/timdown/wPfVn/

コード:

var val = elmt.value;
var start = elmt.selectionStart, end = elmt.selectionEnd;
elmt.value = val.slice(0, start) + txtToIns + val.slice(end);
elmt.focus();
var caretPos = start + txtToIns.length;
elmt.setSelectionRange(caretPos, caretPos);
于 2012-04-16T21:07:45.020 に答える
2

値を変更すると、カーソルが最後に移動します。値を変更した後は、カーソル位置を手動でリセットする必要があります。

これを試して:

var start = elmt.selectionStart,
    len   = txtToIns.length,
    pos   = start + len;
elmt.value = elmt.value.substring(0, start) + txtToIns + " " + elmt.value.substring(start) + " ";
elmt.focus();
elmt.value = elmt.value.trim();
elmt.setSelectionRange( pos, pos, 0 );

また、値を設定した行の不要なロジックもクリーンアップしました。うまくいけば、私は何も壊さなかったが、もしそうなら、あなたの元の行に戻ってください。</ p>

于 2012-04-16T19:14:27.597 に答える