テキスト領域にカーソルを置き、同じページのツリービューノードをクリックして、ツリーノードをクリックする直前にカーソルを置いたテキスト領域にノードのテキストを選択する必要があるシナリオがあります。
私は以下を含むスタックオーバーフローについて多くの答えを得ました、
カーソルが置かれている場合はカーソル位置のtextareaにテキストを挿入します。そうでない場合は、IEでテキストを最後に追加する必要があります。
jQueryを使用してtextareaにテキストを挿入します
テキストエリアの現在のキャレット位置にテキストを挿入する方法
Javascriptを使用して、テキストエリアのカーソルにテキストを挿入する
カーソルがある場所にテキストを挿入するにはどうすればよいですか?
FFとChromeは上記のソリューションで正常に動作しますが、フォーカスを他のコントロールに移動すると、IE 8以前のバージョンは失敗します(IE9ではチェックしませんでした)。
ほとんどすべての投稿に、IEの以下または同様の実装があります。
(function ($) {
$.fn.getCursorPosition = function () {
var el = $(this).get(0);
var pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength
}
return pos;
}
})(jQuery);
注:if(el.selectionStart || el.selectionStart == '0')
の代わりにif ('selectionStart' in el)
、 のif(document.selection)
代わりに使用することもできますif ('selection' in document)
ただし、フォーカスを最初に他のコントロールに移動してから実行すると、これは失敗します。私の場合、ユーザーがノードをトラバースすると、フォーカスはツリーノードに移動します。
このシナリオの解決策はありますか?
onkeyupとonclickをテキスト領域に書き込み、そのカーソル位置を非表示フィールドに保存することを考えているので、フォーカスを他のコントロールに移動すると、テキスト領域のカーソル位置を取得するための非表示フィールドがあります。後でここに投稿しますが、誰かが何か良いアイデアを持っているなら、共有してください。
前もって感謝します