我认为在计算选择边界时计算换行符为两个字符/光标位置是正确的方法。基本上,这两个字符\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