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漏洞已重新打开,因此有希望。
以下是我对两个类似问题的回答: