NoteOnMe博客平台搭建
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
4.6 KiB

3 years ago
  1. (function ($) {
  2. /*
  3. * 文本域光标操作的jQuery扩展 @Mr.Think http://mrthink.net/text-field-jquery-extend/
  4. */
  5. $.fn.extend({
  6. /*
  7. * 获取光标所在位置
  8. */
  9. iGetFieldPos: function () {
  10. var field = this.get(0);
  11. if (document.selection) {
  12. //IE
  13. $(this).focus();
  14. var sel = document.selection;
  15. var range = sel.createRange();
  16. var dupRange = range.duplicate();
  17. dupRange.moveToElementText(field);
  18. dupRange.setEndPoint('EndToEnd', range);
  19. field.selectionStart = dupRange.text.length - range.text.length;
  20. field.selectionEnd = field.selectionStart + range.text.length;
  21. }
  22. return [field.selectionStart,field.selectionEnd];
  23. },
  24. /*
  25. * 选中指定位置内字符 || 设置光标位置
  26. * --- 从start起选中(含第start个)到第end结束不含第end个
  27. * --- 若不输入end值即为设置光标的位置第start字符后
  28. */
  29. iSelectField: function (start, end) {
  30. var field = this.get(0);
  31. //end未定义,则为设置光标位置
  32. if (arguments[1] == undefined) {
  33. end = start;
  34. }
  35. if (document.selection) {
  36. //IE
  37. var range = field.createTextRange();
  38. range.moveEnd('character', -$(this).val().length);
  39. range.moveEnd('character', end);
  40. range.moveStart('character', start);
  41. range.select();
  42. } else {
  43. //非IE
  44. field.setSelectionRange(start, end);
  45. $(this).focus();
  46. }
  47. },
  48. /*
  49. * 选中指定字符串
  50. */
  51. iSelectStr: function (str) {
  52. var field = this.get(0);
  53. var i = $(this).val().indexOf(str);
  54. i != -1 ? $(this).iSelectField(i, i + str.length) : false;
  55. },
  56. /*
  57. * 在光标之后插入字符串
  58. */
  59. iAddFieldbefore: function (str) {
  60. var field = this.get(0);
  61. var v = $(this).val();
  62. var len = $(this).val().length;
  63. if (document.selection) {
  64. //IE
  65. $(this).focus();
  66. document.selection.createRange().text = str;
  67. } else {
  68. //非IE
  69. var selPos = field.selectionStart;
  70. $(this).val($(this).val().slice(0, field.selectionStart) + str + $(this).val().slice(field.selectionStart, len));
  71. this.iSelectField(selPos + str.length);
  72. };
  73. },
  74. iAddFieldafter: function (str) {
  75. var field = this.get(0);
  76. var v = $(this).val();
  77. var len = $(this).val().length;
  78. if (document.selection) {
  79. //IE
  80. $(this).focus();
  81. document.selection.createRange().text = str;
  82. } else {
  83. //非IE
  84. var selPos = field.selectionEnd;
  85. $(this).val($(this).val().slice(0, field.selectionEnd) + str + $(this).val().slice(field.selectionEnd, len));
  86. this.iSelectField(selPos + str.length);
  87. };
  88. },
  89. iAddFieldboth: function (str) {
  90. var field = this.get(0);
  91. var v = $(this).val();
  92. var len = $(this).val().length;
  93. if (document.selection) {
  94. //IE
  95. $(this).focus();
  96. document.selection.createRange().text = str;
  97. } else {
  98. //非IE
  99. var selPos = field.selectionFirst;
  100. var selPos = field.selectionEnd;
  101. $(this).val($(this).val().slice(0, field.selectionStart) + str + $(this).val().slice(field.selectionStart, field.selectionEnd)+str+$(this).val().slice(field.selectionEnd, len));
  102. this.iSelectField(selPos + str.length);
  103. };
  104. },
  105. /*
  106. * 删除光标前面(-)或者后面(+)的n个字符
  107. */
  108. iDelField: function (n) {
  109. var field = this.get(0);
  110. var pos = $(this).iGetFieldPos();
  111. var v = $(this).val();
  112. //大于0则删除后面,小于0则删除前面
  113. if(pos>0){
  114.              $(this).val(n > 0 ? v.slice(0, pos - n) + v.slice(pos) : v.slice(0, pos) + v.slice(pos - n));
  115.   $(this).iSelectField(pos - (n < 0 ? 0 : n));
  116.             }
  117. }
  118. });
  119. })(jQuery);