2013-07-02 2 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; 
}  

ДИВ называется «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; 

Значение на РИТАХ, который preCaretRange.toString().length собирается вернуть вам полную длину строки, которая была выбрана, и не начального положения. Чтобы получить начальную позицию, вы должны использовать имущество startOffset, хранящееся ,. Поэтому:

var startOffset = preCaretRange.startOffset; 

Примечание по оптимизации: вам не нужно клонировать range в preCaretRange..

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' –

Смежные вопросы