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 被交换。即,无论选择实际从哪一端开始和结束,锚点都会重置到选择的最左端,并将焦点重置到最右端。添加范围(或至少不存储)时似乎忽略了锚点和焦点,并且它默认并假定左锚点和右焦点。

这是一个该死的麻烦!

我不抱太大希望,但是有什么办法可以解决这种行为。我真的很想能够恢复原来的锚点和焦点位置。

在 chrome 和 firefox 中工作相同。

编辑

好的,已经得出了部分答案:

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);

但是,这在 IE9+ 中不起作用,因为 IE 没有实现扩展方法。那么现在的问题就变成了,如何让IE在这方面玩的好呢?

4

1 回答 1

1

不,这在 IE 中是不可能的。一年前我在 IE 错误跟踪器中提出了一个错误,建议他们实施extend(),但它没有发生,现在他们已经关闭了这个错误,它似乎不太可能很快发生。

更新: IE 错误已重新打开,因此有希望。

以下是我对两个类似问题的回答:

于 2013-04-25T08:39:44.160 回答