Files
2018-12-03 17:31:53 +08:00

80 lines
2.6 KiB
JavaScript

define(function(require, exports, module) {
(function($){
$.fn.extend({
// 获取当前光标位置的方法
getCurPos:function() {
var curCurPos = '';
var all_range = '';
if (navigator.userAgent.indexOf("MSIE") > -1) { //IE
if( $(this).get(0).tagName == "TEXTAREA" ){
// 根据body创建textRange
all_range = document.body.createTextRange();
// 让textRange范围包含元素里所有内容
all_range.moveToElementText($(this).get(0));
} else {
// 根据当前输入元素类型创建textRange
all_range = $(this).get(0).createTextRange();
}
// 输入元素获取焦点
$(this).focus();
// 获取当前的textRange,如果当前的textRange是一个具体位置而不是范围,textRange的范围从start到end.此时start等于end
var cur_range = document.selection.createRange();
// 将当前的textRange的end向前移"选中的文本.length"个单位.保证start=end
cur_range.moveEnd('character',-cur_range.text.length)
// 将当前textRange的start移动到之前创建的textRange的start处, 此时当前textRange范围变为整个内容的start处到当前范围end处
cur_range.setEndPoint("StartToStart",all_range);
// 此时当前textRange的Start到End的长度,就是光标的位置
curCurPos = cur_range.text.length;
} else {
// 文本框获取焦点
$(this).focus();
// 获取当前元素光标位置
curCurPos = $(this).get(0).selectionStart;
}
// 返回光标位置
return curCurPos;
},
// 设置当前光标位置方法
setCurPos:function(start,end) {
if(navigator.userAgent.indexOf("MSIE") > -1){
var all_range = '';
if( $(this).get(0).tagName == "TEXTAREA" ){
// 根据body创建textRange
all_range = document.body.createTextRange();
// 让textRange范围包含元素里所有内容
all_range.moveToElementText($(this).get(0));
} else {
// 根据当前输入元素类型创建textRange
all_range = $(this).get(0).createTextRange();
}
$(this).focus();
// 将textRange的start设置为想要的start
all_range.moveStart('character',start);
// 将textRange的end设置为想要的end. 此时我们需要的textRange长度=end-start; 所以用总长度-(end-start)就是新end所在位置
all_range.moveEnd('character',-(all_range.text.length-(end-start)));
// 选中从start到end间的文本,若start=end,则光标定位到start处
all_range.select();
}else{
// 文本框获取焦点
$(this).focus();
// 选中从start到end间的文本,若start=end,则光标定位到start处
$(this).get(0).setSelectionRange(start,end);
}
}
});
})(jQuery);
});