ユーザーが世界へのメッセージを入力できる<textarea>
があります!以下にアップロードボタンがあります...アップロードしたファイルへのリンクを追加したいと思います(心配しないでください、私はそれを持っています)。彼が入力していたテキストのすぐ隣。
同様に、彼は「Hello、world!」と入力し、ファイルをアップロードし(AJAX経由で実行)、そのファイルへのリンクが次の行の<textarea>
のコンテンツに追加されます。注意!カーソル(入力した場所)を同じ場所に保持することはできますか?
JQueryでできることはすべて...何かアイデアはありますか? 'append()'メソッドがあることは知っていますが、この状況ではそうではありませんよね?
試してみてください
var myTextArea = $('#myTextarea');
myTextArea.val(myTextArea.val() + '\nYour appended stuff');
これにはしばらく時間がかかりましたが、次のjQueryは、テキストを追加するだけでなく、カーソルを保存してからリセットすることで、カーソルをまったく同じ場所に保持します。
var selectionStart = $('#your_textarea')[0].selectionStart;
var selectionEnd = $('#your_textarea')[0].selectionEnd;
$('#your_textarea').val($('#your_textarea').val() + 'The text you want to append');
$('#your_textarea')[0].selectionStart = selectionStart;
$('#your_textarea')[0].selectionEnd = selectionEnd;
ただし、おそらくこれを関数でラップする必要があります。
次の回答 をご覧ください。これは、<textarea>
のキャレット位置にテキストを挿入するためのNiceプラグインを示しています。
JQueryには 利用可能なキャレットプラグイン のいずれかを使用できます。基本的には次のとおりです。
JQueryで「追加」関数が必要な場合は、次のように簡単に作成できます。
_(function($){
$.fn.extend({
valAppend: function(text){
return this.each(function(i,e){
var $e = $(e);
$e.val($e.val() + text);
});
}
});
})(jQuery);
_
次に、入力フィールドを参照して.valAppend()
を呼び出すことにより、 使用 できます。
これには私の Rangy input jQueryプラグイン を使用できます。これはすべての主要なブラウザーで機能します。
var $textarea = $("your_textarea_id");
var sel = $textarea.getSelection();
$textarea.insertText("\nSome text", sel.end).setSelection(sel.start, sel.end);