簡體   English   中英

從IE11中的選擇創建TextSelection

[英]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。

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

更新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/sycqeev​​2/

我不確定當您突出顯示文本並按下某個鍵時,您的演示中應該發生什么,所以我沒有嘗試對此做任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM