向textarea光标停放处插入新文本

悠悠 2022-08-24 04:17 204阅读 0赞

//==================================================================================================Control类
var Control = {
/**
* @param {HTMLElement} textarea
*/
TextArea:function(textarea){
var o = textarea;
var start = 0;
var end = 0;

  1. var savepos = function()\{
  2. //如果是Firefox(1.5)的话,方法很简单
  3. if(typeof(o.selectionStart) == "number")\{
  4. start = o.selectionStart;
  5. end = o.selectionEnd;
  6. \}
  7. //下面是IE(6.0)的方法,麻烦得很,还要计算上'/n'
  8. else if(document.selection)\{
  9. var range = document.selection.createRange();
  10. if(range.parentElement().id == o.id)\{
  11. // create a selection of the whole textarea
  12. var range\_all = document.body.createTextRange();
  13. range\_all.moveToElementText(o);
  14. //两个range,一个是已经选择的text(range),一个是整个textarea(range\_all)
  15. //range\_all.compareEndPoints()比较两个端点,如果range\_all比range更往左(further to the left),则
  16. //返回小于0的值,则range\_all往右移一点,直到两个range的start相同。
  17. // calculate selection start point by moving beginning of range\_all to beginning of range
  18. for(start=0; range\_all.compareEndPoints("StartToStart", range) < 0; start++) range\_all.moveStart('character', 1);
  19. // get number of line breaks from textarea start to selection start and add them to start
  20. // 计算一下/n
  21. for(var i = 0; i <= start; i ++)\{
  22. if (o.value.charAt(i) == '/n') start++;
  23. \}
  24. // create a selection of the whole textarea
  25. var range\_all = document.body.createTextRange();
  26. range\_all.moveToElementText(o);
  27. // calculate selection end point by moving beginning of range\_all to end of range
  28. for(end = 0; range\_all.compareEndPoints('StartToEnd', range) < 0; end ++) range\_all.moveStart('character', 1);
  29. // get number of line breaks from textarea start to selection end and add them to end
  30. for (var i = 0; i <= end; i ++)\{
  31. if (o.value.charAt(i) == '/n') end ++;
  32. \}
  33. \}
  34. \}
  35. \};
  36. lee.addEvent(o, 'keydown', savepos);
  37. lee.addEvent(o, 'keyup', savepos);
  38. lee.addEvent(o, 'mousedown', savepos);
  39. lee.addEvent(o, 'mouseup', savepos);
  40. lee.addEvent(o, 'focus', savepos);
  41. this.insert = function(text)\{
  42. var pre = o.value.substr(0, start);
  43. var post = o.value.substr(end);
  44. o.value = pre + text + post;
  45. \};
  46. \}

};

发表评论

表情:
评论列表 (有 0 条评论,204人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TextArea中定位光标位置

        在项目中,遇到一个场景:希望能在TextArea中输入某条记录中的明细(明细较简单,没有附属信息,只用记录顺序和值即可,譬如用“+”号来作为明细分隔符:1+1.5+2+