2013-07-02 19 views
2

我想在div中找到所選文本的位置。我提示用戶選擇一個div中的文本的子字符串,然後提交它。我需要起點和終點的索引,並且使用下面的策略還沒有成功。任何幫助將非常感激。在javascript中選擇的位置

這是我具備的功能,它是不工作:

if (typeof window.getSelection != 'undefined') {                                                        
var sel = window.getSelection();                                                           
var range = sel.getRangeAt(0);                                                            
var preCaretRange = range.cloneRange();                                                        
startOffset = preCaretRange.toString().length;                                                       
endOffset = startOffset + range.toString().length; 
}  

DIV的被稱爲 「myarea」。謝謝

+1

哪條線「不工作」?你的if條件是真的嗎?任何一行都會引發錯誤嗎?你是否獲得了你的範圍的數值,但是它們與預期的不同(例如'-1','0')? – apsillers

+0

可能相關的和有幫助的:http://stackoverflow.com/questions/5669448/get-selected-texts-html-in-div – David

回答

2

你差不多了!
它的startOffset這是導致它不工作。
目前,它是:

var startOffset = preCaretRange.toString().length; 

在RHS的值,它是preCaretRange.toString().length是要回報你已經選擇的字符串的總長度,起始位置。要獲得開始位置,您將使用startOffset屬性存儲的範圍。因此:

var startOffset = preCaretRange.startOffset; 

上優化的說明:你不需要克隆rangepreCaretRange.

document.body.addEventListener('mouseup', function() { 
    if (typeof window.getSelection != 'undefined') { 
     var sel = window.getSelection(); 
     var range = sel.getRangeAt(0); 

     var startOffset = range.startOffset; 
     var endOffset = startOffset + range.toString().length - 1; 

     console.log("Selection starts at: " + startOffset); 
     console.log("Selection ends at: " + endOffset); 
    } 
}, false); 

這裏是一個小提琴這表明它與實際的文本選擇工作:http://jsfiddle.net/Dp3qp/3/

+0

這適用於startoffset,但不適用於結束偏移量..它給出了比實際指數。 – user1011332

+1

所以它適用於第一次選擇,但不適用於以下選擇。 – user1011332

+0

如果你正在尋找一個包容性的結束範圍,那麼'endOffset'將被簡單地改爲'endOffset-1' –