非IE浏览器的Range.select()等效方法

时间:2013-02-04 13:37:06

标签: javascript range contenteditable

如果我有

var range = document.body.createTextRange(); 

我在Internet Explorer中调用range.select();,这相当于其他浏览器(Firefox,Chrome,Opera)中的范围选择方法?在创建范围对象并将其添加到当前选择之后,我正在寻找使得我的插入符号在可信任的div中可见的内容。

谢谢!

稍后编辑: 我需要这个,因为我试图让我的应用程序在所有浏览器上运行,我需要在用户弹出窗口中选择的文本之后将插入符号放在一个可信的div中。到目前为止,我的应用程序正在开发IE,但我还需要在Opera,Firefox和Chrome上运行它。用于将插入符号放在IE上的我的Javascript代码如下所示:

 function setCaretPos()
 {
    if (document.selection) 
    {
       /* IE */
       var range = document.body.createTextRange();
       range.moveToElementText(editableDiv);
       var insertedSpan = document.getElementById('span' + count);
       var preCaretRange = document.body.createTextRange();
       preCaretRange.moveToElementText(insertedSpan);
       preCaretRange.moveEnd("character", 2);
       range.setEndPoint("EndToEnd", preCaretRange);
       range.collapse(false);
       range.select();
    }
    else
    {
     if (window.getSelection) {
     /* Firefox, Opera, Chrome */
     var sel = window.getSelection();
     if(sel.rangeCount)
     {
        var range = sel.getRangeAt(0);
        var insertedSpan = document.getElementById('span' + count);
        range.selectNodeContents(insertedSpan);
        range.collapse(false);
        sel.removeAllRanges();
        sel.addRange(range);
       }
     }
 }

使用上面的代码,跨度内的文本被选中,但我的问题是插入的跨度后插入符号没有显示,它只是消失了。

任何建议都非常感谢。谢谢!

1 个答案:

答案 0 :(得分:2)

其他浏览器中的等价物是通过Selection对象:

var range = document.createRange();
var selection = window.getSelection();
selection.removeAllRanges();
selection.addRange(range);