Javascript 获取文本区域中的插入符号位置(IE)
我想在文本区域内获得插入符号位置(仅限Internet Explorer)。 我有这个:Javascript 获取文本区域中的插入符号位置(IE),javascript,Javascript,我想在文本区域内获得插入符号位置(仅限Internet Explorer)。 我有这个: document.activeElement.focus(); var sel2 = document.selection.createRange(); sel2.moveStart('character', -document.activeElement.value.length); var caretPos = sel2.text.length; alert(caretPos)
document.activeElement.focus();
var sel2 = document.selection.createRange();
sel2.moveStart('character', -document.activeElement.value.length);
var caretPos = sel2.text.length;
alert(caretPos);
如果textarea只有一行,我会得到正确的结果,但如果有很多行,结果是错误的,因为新行需要额外的字符,而这些字符是不可见的
如何获得正确的位置值(不删除\r\n和类似的脏活) 我认为在计算选择边界/光标位置时,将换行符计算为两个字符是正确的方法。基本上,这两个字符
\r\n
在文本中。它们存在于textarea的value
属性中,并且存在于提交给服务器的值中
我能看到的将换行计数为一个字符的唯一参数是:
TextRange
基于字符的方法有点疯狂,无论在哪里使用都会导致问题
我认为将选择/插入位置作为相对于文本中的实际文本的位置是完全有意义的。这允许轻松地操纵文本
这里有两个主要功能。第一个是我见过的唯一一个文本区域选择/插入符号位置获取功能,可以正确处理所有换行符。你可以在这里找到:
. 其次,这里有一个互补的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();
}
可能的重复不是我所需要的,它计算新行的额外字符。这部分关于换行符的内容似乎没有被很好地理解,所以我认为这是一个合理的问题。什么是startOffset和endOffset?