从IE11中的选择创建TextSelection

时间:2014-07-25 14:26:36

标签: javascript internet-explorer selection

我正在尝试在IE11中修复一个应用程序而且我遇到了这个错误:在旧版本的IE中,这是一个简单的selection object,但它在IE11中已被弃用。 MSDN页面提供使用getSelection而不是它,但它不一样。我需要根据选择创建TextRange,在旧API中有一个简单的解决方案:

// there is a TextRange object what I need
var textRange = document.selection.createRange();

新的HTMLSelection对象没有createRange()方法,我找不到任何正确的解决方案,不修改DOM。

我试试这个:http://jsfiddle.net/p4Lu4/1/(用法:选择一些文字然后按任意键。)

它的问题:如果你选择抛出其中一个红色框,它将删除该框。

任何人都可以知道更好的解决方案吗?

解决方案:

我想,我找到了解决方案。不是最好也最好但它对我有用:我可以从Selection中创建完全相同的TextRange。

http://jsfiddle.net/p4Lu4/4/

更新2:

我为此创建了一个模块:https://gist.github.com/festo/50fe800c7369db140a62

1 个答案:

答案 0 :(得分:2)

我的Rangy库具有将DOM兼容范围转换为IE TextRange的代码,作为在IE< = 8中提供DOM范围和选择支持的一部分。最新版本明确公开此转换在选择对象上:

var textRange = rangy.getSelection().getNativeTextRange();

请注意,Rangy选择的getNativeTextRange()方法仅存在于IE中。

另一种选择是使用Rangy的TextRange module,其中除了其他功能之外,还为Rangy的范围对象添加了类似IE的findText()方法,以及class applier module来进行突出显示。这适用于所有主流浏览器。

演示:http://jsfiddle.net/sycqeev2/

我不确定当您突出显示文本并按下某个键时,您的演示应该会发生什么,所以我没有尝试对此做任何事情。