Выбор textrange IE, начальная позиция изменена

Моя начальная позиция меняется, когда я выбираю текст с помощью «shift + arrow_left», позвольте мне объяснить в примере:

Пример: - contenteditable div - я вставил код 0182 (¶) = переменная: hardReturn

текст в div: test¶ abc

код на клавишу вверх + стрелка_влево:

    var myRange = document.selection.createRange(); 
myRange.moveStart('character', -1); 
var charVoor = myRange.text.substring(0, 1);

if(charVoor == hardReturn){
    myRange.moveEnd('character', -1);
    myRange.select();   
}else{
} 

Итак, моя проблема: мой курсор находится между "b" и "c", я начинаю выделять... У меня есть "ab" под выделением, затем я делаю еще один выбор влево, мой выбор перескакивает автоматически перед «¶», но после этого моя начальная позиция моего выбора находится перед «¶», а не между «b» и «c», где я начал.


person Ziggiej    schedule 12.06.2012    source источник


Ответы (1)


Вы можете использовать клон объекта TextRange для проверки hardReturn:

var myRange = document.selection.createRange();
var chkRange = myRange.duplicate();
chkRange.moveStart('character', -1); 
var charVoor = chkRange.text.substring(0, 1);

if(charVoor == hardReturn){
    chkRange.moveEnd('character', -1);
    ....  
}

Я не уверен, какой окончательный текст вы хотите в выборе. При необходимости вы можете переместить исходный myRange по отношению к chkRange с помощью метода setEndPoint() или использовать collapse(), чтобы свернуть диапазон между a и b.

Вы можете найти setEndPoint() и другие методы и свойства в TextRange по адресу MSDN: обход и диапазон

person Teemu    schedule 12.06.2012