[英]Create TextSelection from selection in IE11
我試圖在IE11中修復一個應用程序,我陷入了這個錯誤:在舊版本的IE中,它是一個簡單的選擇對象,但它在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
我的Rangy庫具有將DOM兼容范圍轉換為IE TextRange的代碼,作為在IE <= 8中提供DOM范圍和選擇支持的一部分。最新版本明確地在選擇對象上公開此轉換:
var textRange = rangy.getSelection().getNativeTextRange();
請注意,Rangy選擇的getNativeTextRange()
方法僅存在於IE中。
另一種方法是使用Rangy的TextRange模塊 ,該模塊除了其他功能之外,還為Rangy的范圍對象添加了類似IE的findText()
方法,以及用於執行突出顯示的類應用程序模塊 。 這適用於所有主流瀏覽器。
演示: http : //jsfiddle.net/sycqeev2/
我不確定當您突出顯示文本並按下某個鍵時,您的演示中應該發生什么,所以我沒有嘗試對此做任何事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.