different caret position on firefox and IE
To recreate the problem, please visit http://jsfidd开发者_开发问答le.net/BsJ6V/ and type any character right after the opening body tag (for example, <body>h
if you type the h character).
An alert box will display the caret position. When you run it in Firefox the caret position is 56, when you run it in IE it is 60. Could you please what the matter is?
EDIT:: UPDATED LINK.
The difference is because IE counts each line break within a textarea as two characters (CRLF, or \r\n
) while Firefox counts it as a single LF (\n
) character.
Your function won't get the right caret position in IE if there are leading line breaks. To see this, place the caret at the start of the textarea in your first jsFiddle example and press return a few time and trying typing in one of the empty lines. To fix this, you can use a function I've posted before on Stack Overflow or if you prefer a jQuery plug-in, I've created one for dealing with textarea selections: http://code.google.com/p/rangyinputs/
UPDATE
Note that jQuery's val()
method normalizes this difference in line breaks between browsers (unhelpfully, in my view, since the value that gets sent to the server isn't normalized) so that line breaks are always \n
. Both my plug-in and your function return a caret position relative to the textarea's raw value property, not jQuery's normalized value, so if you are manipulating the value using the caret position, you need to use $textarea[0].value
instead of $textarea.val()
.
You can see this difference here: http://jsfiddle.net/MyR7J/2/
精彩评论