Javascript 如何保存和恢复anchorNode/anchorOffset&;焦点节点/焦点偏移?

Javascript 如何保存和恢复anchorNode/anchorOffset&;焦点节点/焦点偏移?,javascript,range,getselection,addrange,Javascript,Range,Getselection,Addrange,在以下代码中: 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、 e.锚定重置到选择的最左端,焦点重

在以下代码中:

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、 e.锚定重置到选择的最左端,焦点重置到最右端,而不管选择实际上从哪一端开始和结束。在添加范围(或至少未存储)时,似乎忽略了定位点和焦点,并且默认设置为左定位点和右焦点

真讨厌

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

在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没有实现extend方法。所以现在的问题是,如何让IE在这方面发挥出色?

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

更新:IE漏洞已重新打开,因此有希望。

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


看来您的坚持在@TimDown获得了回报。这个bug是“活跃的”,并且收到了Ben Peters的评论,他在W3C邮件列表中非常活跃。@teleclimber:这是我在W3C邮件列表中提到这个主题时向他抱怨的直接结果:)