2012-03-23 61 views
1

當使用選擇文本和恢復頁面中選定文本的方法時,我發現在中間運行execCommand('insertHTML...會導致存儲的選擇中斷。execCommand insertHTML中斷存儲window.getSelection()

這是如何選擇和恢復文本的示例。

// Get Selection 
var sel = window.getSelection().getRangeAt(0); 
// Clear Selections 
window.getSelection().removeAllRanges(); 
// Restore Selection 
window.getSelection().addRange(sel) 

這工作得很好,但是一旦你運行execCommand('insertHTML..的選擇endOffset本身設置爲相同的值的選擇startOffset

是否有什麼原因呢?更重要的是有這樣一個方法嗎?


這裏可以看到一個錯誤的完整示例,其中包含一些基本的控制檯日誌記錄。 http://jsfiddle.net/blowsie/Y8pJ7/

這個小提琴的目的是選擇文本,將其轉換爲大寫,然後重新選擇文本。

回答

3

如何最好地保存和恢復選擇真的取決於你在做什麼。對於你的具體例子,現有的文本只是在其案件轉換的地方,我會建議一種基於字符索引的方法,例如https://stackoverflow.com/a/5596688/96100(儘管該答案需要Rangy,但可以進行簡單的更改而不需要它:http://jsfiddle.net/Y8pJ7/8)。

對於其他一些情況,更好的方法是在選擇的開始和結束處使用隱形標記元素,這是selection save/restore moduleRangy(披露:我是Rangy的作者)採取的方法。

UPDATE 2012年6月18日

瘦長現在已經偏移基於字符保存和選擇的恢復,並通過新的TextRange moduledemo)的範圍。

+0

真的很好蒂姆,感謝您花時間掛鉤我的小提琴。 – Blowsie 2012-03-23 16:02:30