問題を再現するには、http://jsfiddle.net/BsJ6V/にアクセスして、開始 body タグの直後に任意の文字を入力してください (たとえば、<body>h
h 文字を入力した場合)。
警告ボックスにキャレットの位置が表示されます。Firefoxで実行するとキャレット位置は 56になり、IE で実行すると 60 になります。何が問題なのか教えてください。
編集:: 更新されたリンク。
問題を再現するには、http://jsfiddle.net/BsJ6V/にアクセスして、開始 body タグの直後に任意の文字を入力してください (たとえば、<body>h
h 文字を入力した場合)。
警告ボックスにキャレットの位置が表示されます。Firefoxで実行するとキャレット位置は 56になり、IE で実行すると 60 になります。何が問題なのか教えてください。
編集:: 更新されたリンク。
違いは、IE はテキストエリア内の各改行を 2 文字 (CRLF または\r\n
) としてカウントするのに対し、Firefox は単一の LF ( \n
) 文字としてカウントするためです。
先頭に改行がある場合、関数は IE で正しいキャレット位置を取得しません。これを確認するには、最初の jsFiddle の例でキャレットをテキストエリアの先頭に置き、return キーを数回押して、空の行の 1 つに入力してみてください。これを修正するには、以前にスタック オーバーフローに投稿した関数を使用できます。または、jQuery プラグインを好む場合は、テキストエリアの選択を処理するために作成したものを作成しました: http://code.google.com/p/範囲入力/
アップデート
jQuery のval()
メソッドは、ブラウザー間のこの改行の違いを正規化することに注意してください (私の見解では、サーバーに送信される値が正規化されていないため、役に立ちません)、改行は常に\n
. 私のプラグインとあなたの関数の両方が、jQuery の正規化された値ではなく、テキストエリアの生の値プロパティに相対的なキャレット位置を返すため、キャレット位置を使用して値を操作している場合は、$textarea[0].value
代わりに$textarea.val()
.
この違いはこちらで確認できます: http://jsfiddle.net/MyR7J/2/