在以下代码中:
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在这方面玩的好呢?