6

我正在使用 div[contenteditable=true] 开发所见即所得的编辑器,我想设置从节点 A 的偏移 X 到节点 B 的偏移 Y 的选择范围。我在 Firefox 和 IE9 上做得很好,代码是:

var range = document.createRange();
range.setStart(selectNode, 0);
range.setEnd(selectNode, selectNode.textContent.length);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

但是在 IE8 上,范围对象就完全不同了,它没有 setStart/setEnd,选择对象也没有 remove/addRange 的东西。请帮忙,

4

2 回答 2

4

看看范围内。它是一个跨浏览器范围/选择 API。这可能就是你需要的。

http://code.google.com/p/rangy/

于 2011-12-16T04:41:06.103 回答
3

我有一个类似的问题,发现这个 polyfill 对我非常有用,因为我不能在我的情况下使用 rangy:http: //bl.ocks.org/visnup/3456262

编辑:原始链接确实已经死了。回顾我的旧代码,看起来 polyfill 从未将其纳入发布代码,我们只是进行了功能检测,如下所示:

if(window.getSelection || document.selection){

然后在鼠标上:

var range;
if(window.getSelection){
    var selection = window.getSelection();
    range = selection.getRangeAt(0);
} else if(document.selection){
    range = document.selection.createRange();
    if(!range.surroundContents){
        // then give up, feature not fully implemented
    }
}
// now do stuff with range (i.e. the selection)

...因此该功能不支持 IE8 用户。

然而,一切都没有丢失:Github 上有一个更新的(比我原来的答案)polyfill,如果你必须支持 IE8,它可能会起作用。它看起来既精简又全面。

于 2014-04-20T16:33:21.403 回答