1

私はコンテンツ編集可能なdivレイヤーでキャレットの位置を設定しようとしています。少しウェブを検索して実験した後、これを使用してFirefoxで動作するようになりました。

function set(element,position){
    element.focus();
    var range= window.getSelection().getRangeAt(0);
    range.setStart(element.firstChild,position);
    range.setEnd(element.firstChild,position);
}

[...]

set(document.getElementById("test"),3);

ただし、Chrome / webkitでは、div内のすべてのコンテンツが選択されます。これはWebkitのバグですか、それとも何か間違ったことをしていますか?
前もって感謝します。

4

1 に答える 1

4

ノードがテキスト ノードの場合、ノード内の Range 境界のオフセットは文字オフセットのみです。ノードが要素の場合、オフセットは境界の前の子ノードの数です。

たとえば、HTML がある場合

<div id="myDiv">One <b>two</b> three</div>

...そして、次のように Range を作成します。

var range = document.createRange();
var myDiv = document.getElementById("myDiv");
range.setStart(myDiv, 1);
range.setEnd(myDiv, 1);

... div の最初の子 (テキスト ノード) の直後に開始および終了する Range を取得します。

<div id="myDiv">One |<b>two</b> three</div>
于 2010-04-14T08:20:23.170 に答える