質問
textAreaとリストがあります。ユーザーがリスト項目をダブルクリックすると、選択された項目のラベルがテキストエリアに挿入されます。 textAreaでテキストが選択されている場合、それを置き換える必要があります。そうでない場合は、キャレットポイントで既存のテキストにテキストを挿入する必要があります。
テキストとすべてのものを取得できましたが、キャレットポイントに挿入することができません。誰もこれを行う方法を知っていますか?
解決
実際にはJavaScriptではなく、Adobe Flex 3です。しかし、助けてくれてありがとう。これがFlex 3での方法です。
var caretStart:int = textArea.selectionBeginIndex;
var caretEnd:int = textArea.selectionEndIndex;
textArea.text = textArea.text.substring(0,caretStart)
+ newText
+ textArea.text.substr(caretEnd);
他のヒント
既存のHTML形式がない場合、受け入れられる回答は非常に有効です。私の場合、ユーザーがクリックしてキーワードを入力できる新しいボタンをエディターに挿入しました。実際のクラスを掘り下げてTextRangeオブジェクトを追加するまで、すべてのHTMLフォーマットを失い続けました。
public function keyWord_Click(event:Event) : void
{
var caretStart:int = txtEditor.textArea.selectionBeginIndex;
var caretEnd:int = txtEditor.textArea.selectionEndIndex;
var newText : String = "[[[KEYWORD]]]";
var tf:TextRange = new TextRange(txtEditor,true,caretStart,caretEnd);
tf.text = newText;
}
このアプローチの良い点は、必要に応じてそのTextRangeオブジェクトに条件付き書式を適用できることです。
txtarea.selectionStartおよびtxtarea.selectionEndを使用して、選択したテキストの位置を取得できます。
その後、txtを削除し、選択した新しいテキストを追加します。
Javascriptについてあまり知らないので、U向けに作成しました。
キーワードを使用してGoogleで検索できます。 " Javascript Selected Text TextArea" " Javascriptはテキストを位置に追加します"
サンプルコード: 関数insertAtCursor(myField、myValue){ // IEサポート if(document.selection){ myField.focus(); sel = document.selection.createRange(); sel.text = myValue; } // MOZILLA / NETSCAPEサポート else if(myField.selectionStart || myField.selectionStart == '0'){ var startPos = myField.selectionStart; var endPos = myField.selectionEnd; myField.value = myField.value.substring(0、startPos) + myValue + myField.value.substring(endPos、myField.value.length); } else { myField.value + = myValue; }
caretPos = doGetCaretPosition(myField);
alert(caretPos);
setCaretPosition(myField,caretPos-3);
}