texthelp.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. var TEXTAREA_HELP = {
  2. /*
  3. * 获取光标位置
  4. * @Method getCursorPosition
  5. * @param t element
  6. * @return number
  7. */
  8. getCursorPosition: function(t){
  9. if (document.selection) {
  10. t.focus();
  11. var ds = document.selection;
  12. var range = ds.createRange();
  13. var stored_range = range.duplicate();
  14. stored_range.moveToElementText(t);
  15. stored_range.setEndPoint("EndToEnd", range);
  16. t.selectionStart = stored_range.text.length - range.text.length;
  17. t.selectionEnd = t.selectionStart + range.text.length;
  18. return t.selectionStart;
  19. } else return t.selectionStart;
  20. },
  21. /*
  22. * 设置光标位置
  23. * @Method setCursorPosition
  24. * @param t element
  25. * @param p number
  26. * @return
  27. */
  28. setCursorPosition:function(t, p){
  29. this.sel(t,p,p);
  30. },
  31. /*
  32. * 插入到光标后面
  33. * @Method add
  34. * @param t element
  35. * @param txt String
  36. * @return
  37. */
  38. add:function (t, txt){
  39. // var val = t.value;
  40. if(document.selection){
  41. t.focus();
  42. document.selection.createRange().text = txt;
  43. } else {
  44. var cp = t.selectionStart;
  45. var ubbLength = t.value.length;
  46. var s = t.scrollTop;
  47. // document.getElementById('aaa').innerHTML += s + '<br/>';
  48. t.value = t.value.slice(0,t.selectionStart) + txt + t.value.slice(t.selectionStart, ubbLength);
  49. this.setCursorPosition(t, cp + txt.length);
  50. // document.getElementById('aaa').innerHTML += t.scrollTop + '<br/>';
  51. firefox=navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function(){
  52. if(t.scrollTop != s) t.scrollTop=s;
  53. },0);
  54. };
  55. },
  56. /*
  57. * 删除光标 前面或者后面的 n 个字符
  58. * @Method del
  59. * @param t element
  60. * @param n number n>0 后面 n<0 前面
  61. * @return
  62. * 重新设置 value 的时候 scrollTop 的值会被清0
  63. */
  64. del:function(t, n){
  65. var p = this.getCursorPosition(t);
  66. var s = t.scrollTop;
  67. var val = t.value;
  68. t.value = n > 0 ? val.slice(0, p - n) + val.slice(p):
  69. val.slice(0, p) + val.slice(p - n);
  70. this.setCursorPosition(t ,p - (n < 0 ? 0 : n));
  71. firefox=navigator.userAgent.toLowerCase().match(/firefox\/([\d\.]+)/) && setTimeout(function(){
  72. if(t.scrollTop != s) t.scrollTop=s;
  73. },10);
  74. },
  75. /*
  76. * 选中 s 到 z 位置的文字
  77. * @Method sel
  78. * @param t element
  79. * @param s number
  80. * @param z number
  81. * @return
  82. */
  83. sel:function(t, s, z){
  84. if(document.selection){
  85. var range = t.createTextRange();
  86. range.moveEnd('character', -t.value.length);
  87. range.moveEnd('character', z);
  88. range.moveStart('character', s);
  89. range.select();
  90. }else{
  91. t.setSelectionRange(s,z);
  92. t.focus();
  93. }
  94. },
  95. /*
  96. * 选中一个字符串
  97. * @Method sel
  98. * @param t element
  99. * @param s String
  100. * @return
  101. */
  102. selString:function(t, s){
  103. var index = t.value.indexOf(s);
  104. index != -1 ? this.sel(t, index, index + s.length) : false;
  105. }
  106. };