web-dev-qa-db-ja.com

JavaScriptで範囲による選択を設定する

JavaScriptを使用して場所/アンカーオフセットと長さ/オフセットを送信してテキストを選択したいここに私のコードがあります

  var node = document.getElementById("content");
   var range = document.createRange();
   range.setStart(node, 0);
   range.setEnd(node, 4); // here 0 and 4 is my location and length for the selection
       // if my string is "This is test string" in my case its must select "This" 
   var selection = window.getSelection();
   selection.removeAllRanges();
    selection.addRange(range);

しかし、問題はrange.setStartとrange.setEndにあり、期待どおりに機能しない

19
Shinning River

DOM RangeのsetStart()およびsetEnd()メソッドは適切に指定されているため、 the spec または [〜#〜 ] mdn [〜#〜]

要約すると、文字オフセットの観点から範囲境界を指定する場合は、要素ではなくテキストノードを処理する必要があります。要素に単一のテキストノードが含まれている場合、コードの最初の行を次のように変更すると機能します。

var node = document.getElementById("content").firstChild;
15
Tim Down

Jqueryの結果セットを選択しようとしている場合は、ここに良い解決策があります

var $newSelection = $('.someElements');
var selection = window.getSelection();
var range = document.createRange();
range.setStartBefore($newSelection.first()[0]);
range.setEndAfter($newSelection.last()[0]);
selection.removeAllRanges();
selection.addRange(range);
13
Charlie