6

要素のコンテンツ全体を選択する次のコードがあります。

function selectElement(element) {
    var sel = window.getSelection();
    sel.removeAllRanges();
    var range = document.createRange();
    range.setStart(element, 0);
    range.setEnd(element, 1);
    sel.addRange(range);
    console.log(range);
}

私が呼び出すもの:

selectElement(document.getElementById("input"));

次のようになっている場合#input:

<div id="input">
Lorem Ipsum Dolor Sit
</div>

0-7選択が次のようになるように、どうすれば文字を選択できますか。

<div id="input">
[Lorem I]psum Dolor Sit
</div>

と を設定するsetStartsetEndうまくいくと思いましたが、 からしか設定できません0-1

ノード自体ではなく、ノード内のテキストを選択できますか?

4

3 に答える 3

4

div ノード全体をsetStart/setEndに渡しているため、0 と 1 の間でしか選択できません。firstChild代わりに、テキスト ノードである div を渡す必要があります。たとえば、「Ipsum」を選択するには:

range.setStart(element.firstChild, 7);
range.setEnd(element.firstChild, 12);

http://jsfiddle.net/JJ86n/

注: クロスブラウザーでの範囲の処理は常に混乱しています。しばらく扱っていませんでしたが、前回チェックしたときは、厄介な詳細をrangyのようなライブラリに任せるのが良い考えのように思えました。

于 2013-03-01T18:14:18.160 に答える
2

要素内のテキスト ノードから選択する必要があります。

range.setStart(element.childNodes[0], 0);
range.setEnd(element.childNodes[0], 7);
于 2013-03-01T18:14:17.100 に答える
0

プロパティとしてさまざまなオブジェクトを持つオブジェクトである要素全体を扱っています。Strings を処理するには、最初に String(text) サブ要素を取得する必要があります。これを行うには、要素の子ノードの配列から子ノードを取得します。length や substr などの JavaScript String プロパティまたはメソッドを Selection オブジェクトで直接使用しようとすると、そのプロパティまたはメソッドがない場合はエラーが発生し、ある場合は予期しない結果が返される可能性があります。

于 2013-03-01T18:28:20.070 に答える