2013-04-26 25 views

回答

2

看後插件似乎FirePad使用textarea

根據another SO post的回答,似乎textareas不使用與其他節點相同的選擇範圍。

accepted answer解釋它是這樣的:

有多餘的bizarreness與textarea的節點回事。如果我記得 正確,那麼當您在IE, 中選擇它們時,它們的行爲與其他任何節點相同,但在其他瀏覽器中,它們具有獨立的選擇範圍,其中 通過 節點上的.selectionEnd和.selectionStart屬性公開。

highest voted answer顯示了一個解決方案。

該解決方案使用的參考直接textarea節點和使用該元件的selectionEndselectionStart性能,與此類似從那裏獲取所選範圍:

function myFunction() { 
    var e = document.getElementById('thearea'); 

    //Mozilla and DOM 3.0 
    if ('selectionStart' in e) { 
     var l = e.selectionEnd - e.selectionStart; 

     var start = e.selectionStart, 
      end = e.selectionEnd, 
      length = l, 
      text = e.value.substr(e.selectionStart, l); 

     alert(text); 
    } 
} 

DEMO - 使用selectionStartselectionEndtextarea


我不確定這些日子裏所有瀏覽器的情況是否相同,但上面的代碼和鏈接的SO中的附加信息應該可以幫助您獲得理想的結果。

+0

你的回答是好,但您的演示吮吸;-) – musefan 2013-04-26 15:39:34

+0

@musefan:對不起,忘了點擊保存的小提琴:)我固定的,現在。很高興你注意到它。謝謝。 – Nope 2013-04-26 15:41:23

1

Firepad基於CodeMirror。您應該使用CodeMirror公開的功能來執行此操作,而不是直接從DOM中獲取選擇內容。

退房getSelection()在這裏: http://codemirror.net/doc/manual.html