我認爲在計算選擇邊界時計算換行符爲兩個字符/光標位置是正確的方法。基本上,這兩個字符\r\n
在文本中。它們出現在textarea的value
屬性中,並且它們位於提交給服務器的值中。
唯一的參數,我們可以看到計算行符爲一個文字是:
- 一致性與其他瀏覽器
- IE的
TextRange
方法考慮換行作爲一個字符
我想這兩個都沒有效。首先,在計算換行符時,IE與其他瀏覽器已經不一致,因爲它是兩個字符而不是一個字符。其次,IE的TextRange
基於字符的方法無論如何都有點瘋狂,無論它們在哪裏使用都會導致問題。
我認爲將選擇/插入符號位置視爲相對於textarea中實際文本的位置是完全合理的。這允許對文本進行簡單的操作。
這裏有兩個主要功能。第一個是我見過的唯一的textarea選擇/插入符號獲取函數,它可以在所有換行符都正確運行。你可以在這裏找到這個: How to get the start and end points of selection in text area?。其次,這裏有一個互補setSelection
功能:
function offsetToRangeCharacterMove(el, offset) {
return offset - (el.value.slice(0, offset).split("\r\n").length - 1);
}
function setSelection(el, startOffset, endOffset) {
var range = el.createTextRange();
var startCharMove = offsetToRangeCharacterMove(el, startOffset);
range.collapse(true);
if (startOffset == endOffset) {
range.move("character", startCharMove);
} else {
range.moveEnd("character", offsetToRangeCharacterMove(el, endOffset));
range.moveStart("character", startCharMove);
}
range.select();
}
的
可能重複[?如何讓textarea的光標位置(http://stackoverflow.com/questions/263743/how-to-get-cursor-position- in-textarea) – kennytm 2010-07-18 08:43:28
這不是我所需要的,它計算新行的額外字符。 – shivesh 2010-07-18 11:48:22
這部分關於換行似乎一般不太理解,所以我認爲這是一個合理的問題。 – 2010-07-18 15:43:26