2012-04-16 13 views
1

I動的Unicode文字を挿入するためのJavaScriptの以下の部分がある - txtToIns変数で以下表さ - カーソル上でテキストJavaScriptのsetSelectionRange()メソッドとカーソル位置

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()は機能しません。

答えて

5

textarea値のスペース文字で何をしようとしているのかわからない、特に最後の2文字は2行後に切り詰められるので、私は以下のコード。以前に選択されたテキストを使って何をしようとしているのか分からないので、新しいテキストで上書きしたいと思っています。

これはselectionStartselectionStartまたはsetSelectionRange()をサポートしていないIE < 9では機能しません。

デモ: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); 
1

値を変更すると、カーソルが最後に移動します。その値を変更した後にカーソル位置を手動でリセットする必要があります。私はまた、あなたが値を設定する行のいくつかの不必要なロジックをクリーンアップ

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); 

はこれを試してみてください。うまくいけば私は何も壊していないが、私がした場合、元の行に戻すだけです。

関連する問題