【发布时间】:2014-07-25 14:26:35
【问题描述】:
我正在尝试修复 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
【问题讨论】:
-
document.getSelection().getRangeAt(0) 适合我
-
您链接到的文本范围仅适用于少数元素,而不适用于任意选定的元素:“您使用 IHTMLBodyElement::createTextRange、IHTMLInputHiddenElement::createTextRange、IHTMLInputTextElement::createTextRange、IHTMLTextAreaElement 检索 TextRange 对象::createTextRange 或 IHTMLButtonElement::createTextRange." 正文很奇怪,但其他的有一个 .value 和 .selectionStart/.selectionEnd 属性,您可以使用它们来操作文本值。
-
对不起,我有点困惑:我认为TextRange 和IHTMLTxtRange 是一样的,只是IHTMLTxtRange 是一个更新的版本......不幸的是,我需要使用整个身体。
-
在我的Rangy library 中有 Rang-to-TextRange 转换,作为提供 IE
TextRangemodule 有一个findText()方法
标签: javascript internet-explorer selection