javascript関数は、.setSelectionRange()を使用してテキストエリア内の特定の単語を選択します。 Firefoxでは、テキストエリアが自動的に下にスクロールされ、選択したテキストが表示されます。 Chrome(v14)ではそうはしません。 Chromeでテキストエリアを新しく選択したテキストにスクロールさせる方法はありますか? jQueryソリューションは大歓迎です。JavaScript:Chromeでtextarea.setSelectionRangeを使用して選択範囲までスクロール
答えて
ここでは、簡単で効率的なソリューション、純粋なJSです:機能でこれを入れて
//first of all, you ignore any bad english, as i'm french and had a funny evening
//get the textarea
var textArea = document.getElementById('myTextArea');
//define your selection
var selectionStart = 50;
var selectionEnd = 60;
textArea.setSelectionRange(selectionStart, selectionEnd);
// now lets do some math
// we need the number of chars in a row
var charsPerRow = textArea.cols;
// we need to know at which row our selection starts
var selectionRow = (selectionStart - (selectionStart % charsPerRow))/charsPerRow;
// we need to scroll to this row but scrolls are in pixels,
// so we need to know a row's height, in pixels
var lineHeight = textArea.clientHeight/textArea.rows;
// scroll !!
textArea.scrollTop = lineHeight * selectionRow;
が、それにはJavaScriptのElementオブジェクトのプロトタイプを拡張して、あなたは良いです。
さらなるヘルプが必要な場合はお気軽にお問い合わせください。
http://blog.blupixelit.eu/scroll-textarea-to-selected-word-using-javascript-jquery/
それはjsut 1必要なルールと完璧に動作します::
私たちがどのように問題を解決したかを見ることができますin ProveIt(highlightLengthAtIndexを参照)。基本的には、テキストエリアを切り捨て、最後までスクロールして、テキストの2番目の部分を復元することです。また、ブラウザ間の一貫性を維持するためにtextSelectionプラグインを使用しました。
は、私はここで答えを発表した行の高さのnテキストエリアのCSSを設定します!
単純な数学計算をするだけでスクロールする単語の位置が計算され、すべての実験で完全に機能しました!
コードについて必要なものは何でもお気軽にお問い合わせください!
このリンクは質問に答えるかもしれませんが、ここでは答えの重要な部分を含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 –
これはMatthew Flaschenのanswerに触発されたコードです。
は基本的に、トリックは、TEXTAREAを切り捨てる端までスクロールし、テキストの第二の部分を復元することです。/** * Scroll textarea to position. * * @param {HTMLInputElement} textarea * @param {Number} position */ function scrollTo(textarea, position) { if (!textarea) { return; } if (position < 0) { return; } var body = textarea.value; if (body) { textarea.value = body.substring(0, position); textarea.scrollTop = position; textarea.value = body; } }
var textarea, start, end;
/* ... */
scrollTo(textarea, end);
textarea.focus();
textarea.setSelectionRange(start, end);
変数 'position'は部分文字列インデックスとピクセルを取るscrollTopの両方で使用されることは意味がありません。 –
//Complete code for chrome
VAR SAR = {}を以下のように使用します。
SAR.find = function() {
debugger;
var parola_cercata = $("#text_box_1").val(); // the searched word
// make text lowercase if search is supposed to be case insensitive
var txt = $('#remarks').val().toLowerCase();
parola_cercata = parola_cercata.toLowerCase();
var posi = jQuery('#remarks').getCursorPosEnd(); // take the position of the word in the text
var termPos = txt.indexOf(parola_cercata, posi);
if (termPos !== -1) {
debugger;
var target = document.getElementById("remarks");
var parola_cercata2 = $("#text_box_1").val();
// select the textarea and the word
if (target.setSelectionRange) {
if ('selectionStart' in target) {
target.selectionStart = termPos;
target.selectionEnd = termPos;
this.selectionStart = this.selectionEnd = target.value.indexOf(parola_cercata2);
target.blur();
target.focus();
target.setSelectionRange(termPos, termPos + parola_cercata.length);
}
} else {
var r = target.createTextRange();
r.collapse(true);
r.moveEnd('character', termPos + parola_cercata);
r.moveStart('character', termPos);
r.select();
}
} else {
// not found from cursor pos, so start from beginning
termPos = txt.indexOf(parola_cercata);
if (termPos !== -1) {
var target = document.getElementById("remarks");
var parola_cercata2 = $("#text_box_1").val();
// select the textarea and the word
if (target.setSelectionRange) {
if ('selectionStart' in target) {
target.selectionStart = termPos;
target.selectionEnd = termPos;
this.selectionStart = this.selectionEnd = target.value.indexOf(parola_cercata2);
target.blur();
target.focus();
target.setSelectionRange(termPos, termPos + parola_cercata.length);
}
} else {
var r = target.createTextRange();
r.collapse(true);
r.moveEnd('character', termPos + parola_cercata);
r.moveStart('character', termPos);
r.select();
}
} else {
alert("not found");
}
}
};
$.fn.getCursorPosEnd = function() {
var pos = 0;
var input = this.get(0);
// IE Support
if (document.selection) {
input.focus();
var sel = document.selection.createRange();
pos = sel.text.length;
}
// Firefox support
else if (input.selectionStart || input.selectionStart === '0')
pos = input.selectionEnd;
return pos;
};
</script>
私のために非常にf9作品を確認してください単語の検索のためのテキストエリアでスクロールするための解決された問題を元に戻してください –
- 1. 範囲でクエリを選択
- 2. 選択範囲
- 3. Vimでの選択範囲
- 4. SQLの使用範囲ステートメント&選択範囲に挿入
- 5. 範囲を選択できません
- 6. XPathを使用してノード範囲を選択
- 7. 1つのmd-datepickerを使用して範囲を選択
- 8. Excel VBAセルとxlDownを使用して範囲を選択
- 9. サブセット()を使用してデータの範囲を選択する
- 10. ランダムな日付範囲を使用して選択する
- 11. 範囲選択エラー
- 12. daterangepicker選択範囲
- 13. jqueryの範囲に選択範囲を追加します
- 14. テキストエディットでテキスト範囲をプログラムで選択
- 15. 選択した範囲にVBAを使用してExcelで選択した数値を掛ける方法
- 16. GASを使用してスプレッドシートの選択範囲をリアルタイムで取得
- 17. vbaでCells関数を使用して範囲を選択する
- 18. Rデータ範囲を選択
- 19. LAGとLEADの間で項目を選択範囲として使用
- 20. Jquery:選択範囲内の選択
- 21. IXMLDOMElement内の選択範囲を選択しますか?
- 22. Open/Libre Officeマクロを選択範囲にスクロールする
- 23. 色範囲を選択し、その範囲のベクトルマップを作成
- 24. 日付範囲の選択date_formatを使用したMySQL
- 25. EPPlusを使用した選択範囲のセンタリング
- 26. JAVAスイングを使用してカレンダーまたはスライダーの日付範囲を選択
- 27. 日付ピッカーと日付範囲選択ツールとして使用できるカレンダープラグ
- 28. c#を使用して範囲を選択してください。
- 29. VBA範囲の選択
- 30. エラー選択セル範囲
これは完璧です。ありがとう! – hamboy
'charsPerRow'ロジックは改行を無視します。改行はソフト(単語間のラッピング)とハード(実際の改行)の両方で無視されます。 –
あなたは完全に正しいです!私は現在あなたの解決策をチェックしています –