0

次のコードでは:

var s=window.getSelection();
var sr=s.getRangeAt(0);

console.log(s.anchorOffset+" "+s.focusOffset);

s.removeAllRanges();
s.addRange(sr);

console.log(s.anchorOffset+" "+s.focusOffset);

範囲を置換するときは、anchorOffset と focusOffset が入れ替わります。つまり、アンカーは選択範囲の左端にリセットされ、フォーカスは右端にリセットされます。これは、選択範囲が実際に開始および終了した端に関係ありません。範囲を追加するときにアンカーとフォーカスが無視される(または少なくとも保存されない)ようで、デフォルトで左アンカーと右フォーカスを想定しています。

これはめちゃくちゃ迷惑です!

I don't hold out much hope, but is there any way I'm missing that I can work around this behavior. I would really love to be able to restore the original anchor and focus positions.

Works same in chrome and firefox.

EDIT

Ok have worked out a partial answer:

var s=window.getSelection();
var sr=s.getRangeAt(0);

console.log(s.anchorOffset+" "+s.focusOffset);

var aN=s.anchorNode,aO=s.anchorOffset,fN=s.focusNode,fO=s.focusOffset;

s.removeAllRanges();
s.addRange(sr);

s.collapse(aN,aO);
s.extend(fN,fO);

console.log(s.anchorOffset+" "+s.focusOffset);

HOWEVER, this won't work in IE9+ as IE doesn't implement the extend method. So now the question becomes, how to make IE play nice in this regard?

4

1 に答える 1

1

いいえ、IE では不可能です。私は 1年前に IE バグ トラッカーでバグを報告し、実装を提案しましextend()たが、実際には発生していません。

更新: IE のバグが再開されたため、希望があります。

2つの同様の質問に対する私の答えは次のとおりです。

于 2013-04-25T08:39:44.160 に答える