function setCursorPosition(ctrl, pos) { if (ctrl.setSelectionRange) { ctrl.focus(); ctrl.setSelectionRange(pos, pos); } else if (ctrl.createTextRange) {// IE Support var range = ctrl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }
下面是获取光标的位置的,就是在ie8下老是有问题,有的地方获取的是对的,可是有的地方就会跑到文本框第一个位置区了//获取多行文本框光标位置 function getPositionForTextArea(obj) {//ctrl文本框 var CaretPos = 0; var Sel = document.selection.createRange(); var Sel2 = Sel.duplicate(); Sel2.moveToElementText(obj); var CaretPos = -1; while (Sel2.inRange(Sel)) { Sel2.moveStart('character'); CaretPos++; } return CaretPos; }
这几天忙忘记来回复了,找到两个非常有用的帖子,估计你的代码也是从这里找的 Get Caret: http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea Set Caret: http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area你说有的地方出错有的地方不出错,我这里是在IETest下面测试的,都没有问题,不知道你所说出错的是哪种情况?
可以参照此例子,这个对象是我用来在输入框的光标位置插入字符使用的,你可以研究一下:var TextUtil = { insertAtCaret:function(obj, str) { if (document.selection) { obj.focus(); var sel = document.selection.createRange(); sel.text = str; sel.select(); } else if (typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number') { var startPos = obj.selectionStart, endPos = obj.selectionEnd, cursorPos = startPos, tmpStr = obj.value; obj.value = tmpStr.substring(0, startPos) + str + tmpStr.substring(endPos, tmpStr.length); cursorPos += str.length; obj.selectionStart = obj.selectionEnd = cursorPos; } else { obj.value += str; } }, moveEnd:function(obj){ obj.focus(); var len = obj.value.length; if (document.selection) { var sel = obj.createTextRange(); sel.moveStart('character',len); sel.collapse(); sel.select(); } else if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') { obj.selectionStart = obj.selectionEnd = len; } } };
能不能把代码贴上来看看
if (ctrl.setSelectionRange) {
ctrl.focus();
ctrl.setSelectionRange(pos, pos);
} else if (ctrl.createTextRange) {// IE Support
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
function getPositionForTextArea(obj) {//ctrl文本框
var CaretPos = 0;
var Sel = document.selection.createRange();
var Sel2 = Sel.duplicate();
Sel2.moveToElementText(obj);
var CaretPos = -1;
while (Sel2.inRange(Sel)) {
Sel2.moveStart('character');
CaretPos++;
}
return CaretPos;
}
Get Caret:
http://stackoverflow.com/questions/263743/how-to-get-caret-position-in-textarea
Set Caret:
http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area你说有的地方出错有的地方不出错,我这里是在IETest下面测试的,都没有问题,不知道你所说出错的是哪种情况?
insertAtCaret:function(obj, str) {
if (document.selection) {
obj.focus();
var sel = document.selection.createRange();
sel.text = str;
sel.select();
} else if (typeof obj.selectionStart === 'number' && typeof obj.selectionEnd === 'number') {
var startPos = obj.selectionStart,
endPos = obj.selectionEnd,
cursorPos = startPos,
tmpStr = obj.value;
obj.value = tmpStr.substring(0, startPos) + str + tmpStr.substring(endPos, tmpStr.length);
cursorPos += str.length;
obj.selectionStart = obj.selectionEnd = cursorPos;
} else {
obj.value += str;
}
},
moveEnd:function(obj){
obj.focus();
var len = obj.value.length;
if (document.selection) {
var sel = obj.createTextRange();
sel.moveStart('character',len);
sel.collapse();
sel.select();
} else if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') {
obj.selectionStart = obj.selectionEnd = len;
}
}
};