1

我想要做的是允許用戶選擇頁面上的一段文字並突出顯示它,然後能夠加載該選擇並在進一步訪問時重新突出顯示它(純粹用客戶端JavaScript,我打算將來將其打包成Chrome擴展程序)。如何記錄文本在頁面上的位置?

我選擇的文字爲window.getSelection,但AFAIK這並沒有給我任何關於所選文字(或元素)的索引或位置數據。

我現在想到的唯一方法是記錄實際文本並搜索它,但這會引發唯一性問題(相同的字符串可能會在給定頁面上出現多次)。有沒有一種向上遍歷DOM樹並將「路徑」存儲到包含元素(然後只需擔心該元素內的唯一性)的方法?如果沒有更好的方法,我會很高興。

感謝

編輯:什麼,我現在做的是類似於這樣:http://jsfiddle.net/e3XX6/

+0

你打算如何保持他們選擇的狀態?或者是你的問題? – Brad 2013-02-24 23:17:16

+0

你可以顯示你目前使用的代碼來獲取這個字符串嗎?代碼在你的問題中很有用,[現場演示](http://jsfiddle.net/)會更有用。 – 2013-02-24 23:18:14

+0

布拉德:我試圖找出一種保持狀態(知道文本重新選擇在隨後的頁面加載) @DavidThomas感謝您的建議,增加了一個jsfiddle – Zen 2013-02-24 23:27:17

回答

2

你是否審查了getSelection()方法返回的selection對象?例如,它具有anchorNode屬性,該屬性又具有parentElement屬性。最後一個屬性會告訴你包含文本的元素。

看到這個版本的小提琴(打開你的主機!):http://jsfiddle.net/e3XX6/1/

而且,因爲你要做出這個Chrome擴展,我只是建議使用HTML5 Web存儲要記得選擇。

+0

謝謝,這有助於很多(我並不知道'parentElement'屬性) – Zen 2013-02-24 23:42:17

+1

有關'Selection'對象的更多信息,請參見https://developer.mozilla.org/en-US/docs/DOM/Selection – maxedison 2013-02-25 16:09:07

+0

您也可能想看看到https://code.google.com/p/rangy/,尤其是如果您需要開始在不同瀏覽器中使用範圍。 – maxedison 2013-02-26 01:07:42

相關問題