我正在尝试在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。
更新2:
我为此创建了一个模块:https://gist.github.com/festo/50fe800c7369db140a62
答案 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/
我不确定当您突出显示文本并按下某个键时,您的演示应该会发生什么,所以我没有尝试对此做任何事情。