Ответ 1
Новые строки - это два символа (CRLF или \r\n
) в текстовых областях в Opera и IE и один символ (\n
) в других браузерах. Вам нужно будет приспособиться к этому. Здесь функция для этого, рассматривая разрывы строк как один символ во всех браузерах.
Live demo: http://jsfiddle.net/DqtVK/1/
код:
function adjustOffset(el, offset) {
var val = el.value, newOffset = offset;
if (val.indexOf("\r\n") > -1) {
var matches = val.replace(/\r\n/g, "\n").slice(0, offset).match(/\n/g);
newOffset += matches ? matches.length : 0;
}
return newOffset;
}
var setCaretToPos = function(input, selectionStart, selectionEnd){
input.focus();
if(input.setSelectionRange){
selectionStart = adjustOffset(input, selectionStart);
selectionEnd = adjustOffset(input, selectionEnd);
input.setSelectionRange(selectionStart, selectionEnd);
}else if(input.createTextRange){
var range = input.createTextRange();
range.collapse(true);
range.moveEnd('character', selectionEnd);
range.moveStart('character', selectionStart);
range.select();
}
};