Javascript 插入符号函数不';如果插入符号位于最后一个位置,则无法正常工作
遵循IE8中“获取插入符号位置”(文本区域中插入符号前有多少个字符)及以下代码:Javascript 插入符号函数不';如果插入符号位于最后一个位置,则无法正常工作,javascript,html,Javascript,Html,遵循IE8中“获取插入符号位置”(文本区域中插入符号前有多少个字符)及以下代码: function getIEtextareaCaret(el) { var start = 0, range = el.createTextRange(), range2 = document.selection.createRange().duplicate(), range2Bookmark = range2.getBookmark(); range.moveToBook
function getIEtextareaCaret(el) {
var start = 0,
range = el.createTextRange(),
range2 = document.selection.createRange().duplicate(),
range2Bookmark = range2.getBookmark();
range.moveToBookmark(range2Bookmark);
while (range.moveStart('character' , -1) !== 0) {
start++;
}
return start;
}
它工作得很好,但是如果插入符号位于最后一个位置(例如,如果textarea包含“abc”,则插入符号位于c之后),则函数返回一个错误的数字,如1。如何解决这个问题?这已经在中得到了回答 如果使用答案中的代码,则应获得正确的偏移量(在IE8和Chrome中检查):
另外,这也适用于其他浏览器。在
范围2
行的末尾缺少一个,
。结果,range2Bookmark
变成了一个全局变量。@kapa:修复了,我复制错误,但这不是解决方案。。。
function getCaret(el) {
if (el.selectionStart) {
return el.selectionStart;
} else if (document.selection) {
el.focus();
var r = document.selection.createRange();
if (r == null) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
return 0;
}