2013-10-03 24 views
1

給定一個用戶已經選擇的文本框,我希望能夠用JS擴展選擇(通過單詞或字符)。在HTML文本框中擴展JS範圍/選擇

我知道,在一些瀏覽器,我可以使用window.getSelection();(見here),以獲得當前的選擇,並且在FireFox,你可以使用selection.modify("extend", "forward", "word");也有一個TextRange對象,IE瀏覽器supports

這是一個需求,因爲我需要檢查選擇並將它與它前後的文本進行比較(顯然,當我完成時我將重置選擇)。

我需要支持IE9(儘管也許我可以擺脫IE10),Chrome和FF,我有JQuery,但可以使用任何第三方JS庫。

這篇文章很有趣,但不是很想要什麼:Selection ranges in webkit (Safari/Chrome)

回答

1

Textareas有自己的選擇API,它不同於API在頁面或contenteditable元素中的常規選擇。這非常簡單:文本區域具有可讀可寫的selectionStartselectionEnd屬性,它們分別代表文本區域值中的選擇開始和結束位置。 IE < = 8爲此有一個不同的API,但IE 9支持它。

你沒有得到相當於Selection.modify(),但你可能不需要它,因爲它通常很容易處理textarea的值。

MDN:https://developer.mozilla.org/en-US/docs/Web/API/HTMLTextAreaElement

0

您可以通過改變主動式選擇:

var selection = window.getSelection(); 
var range = selection.getRangeAt(0); 
range.setStart(range.startContainer, 0); // set to the beginning 
selection.setSingleRange(range); 

修改範圍不會更新UI,你必須設置範圍。

+0

這看起來像它會將選擇設置爲僅僅是開始?無論它似乎沒有工作:http://jsfiddle.net/48d2Q/6/在Chrome中它的錯誤:Uncaught IndexSizeError:索引或大小是負數,或大於允許的值。 –

+0

您尚未正確設置jsFiddle。確保這些代碼在您實際選擇時運行。 – Halcyon