Разница в том, что IE считает каждый разрыв строки в текстовой области как два символа (CRLF или \r\n
), в то время как Firefox считает его как один символ LF (\n
).
Ваша функция не получит правильную позицию каретки в IE, если есть разрывы в начале строки. Чтобы увидеть это, поместите курсор в начало текстовой области в вашем первом примере с jsFiddle и несколько раз нажмите клавишу возврата и попробуйте ввести одну из пустых строк. Чтобы это исправить, вы можете использовать функцию, которую я ранее публиковал в Stack Overflow или, если вы предпочитаете плагин jQuery, я создал его для работы с выборками textarea: http://code.google.com/p/rangyinputs/
UPDATE
Обратите внимание, что метод jQuery val()
нормализует эту разницу в разрывах строк между браузерами (на мой взгляд, бесполезно, поскольку значение, отправляемое на сервер, не нормализуется), поэтому разрывы строк всегда равны \n
. И мой плагин, и ваша функция возвращают позицию каретки относительно свойства необработанного значения текстовой области, а не нормализованного значения jQuery, поэтому, если вы манипулируете значением с помощью позиции каретки, вам нужно использовать $textarea[0].value
вместо $textarea.val()
.
Вы можете увидеть эту разницу здесь: http://jsfiddle.net/MyR7J/2/