如果插入符号处于最后位置,则插入功能不能很好地起作用

时间:2013-12-16 14:55:41

标签: javascript html

在IE8及更少内容中获取插入符号位置的代码(texta中插入符号前面有多少个字符):

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.如何解决?

1 个答案:

答案 0 :(得分:1)

How to get caret position in textarea?已经回答了这个问题。

如果你使用答案中的代码,你应该得到正确的偏移量(在IE8和Chrome中检查):

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; 
}

另外,这也适用于其他浏览器。