有人知道如何将文本框中的插入符号移动到特定位置吗?
例如,如果一个文本框(例如,输入元素,而不是文本区域)中有50个字符,而我想将插入符号放在字符20之前,我该如何操作呢?
这不同于这个问题:jQuery Set Cursor Position in Text Area,它需要jQuery。
发布于 2010-11-29 18:11:14
答案中的链接断开了,这个链接应该是有效的(所有学分都将转到blog.vishalon.net):
http://snipplr.com/view/5144/getset-cursor-in-html-textarea/
如果代码再次丢失,下面是两个主要函数:
function doGetCaretPosition(ctrl)
{
var CaretPos = 0;
if (ctrl.selectionStart || ctrl.selectionStart == 0)
{// Standard.
CaretPos = ctrl.selectionStart;
}
else if (document.selection)
{// Legacy IE
ctrl.focus ();
var Sel = document.selection.createRange ();
Sel.moveStart ('character', -ctrl.value.length);
CaretPos = Sel.text.length;
}
return (CaretPos);
}
function setCaretPosition(ctrl,pos)
{
if (ctrl.setSelectionRange)
{
ctrl.focus();
ctrl.setSelectionRange(pos,pos);
}
else if (ctrl.createTextRange)
{
var range = ctrl.createTextRange();
range.collapse(true);
range.moveEnd('character', pos);
range.moveStart('character', pos);
range.select();
}
}
发布于 2012-04-19 19:54:16
我稍微调整了kd7的答案,因为当selectionStart为0时,elem.selectionStart会计算为false。
function setCaretPosition(elem, caretPos) {
var range;
if (elem.createTextRange) {
range = elem.createTextRange();
range.move('character', caretPos);
range.select();
} else {
elem.focus();
if (elem.selectionStart !== undefined) {
elem.setSelectionRange(caretPos, caretPos);
}
}
}
发布于 2019-08-29 20:13:25
我找到了一个简单的方法来解决这个问题,在IE和Chrome上进行了测试:
function setCaret(elemId, caret)
{
var elem = document.getElementById(elemId);
elem.setSelectionRange(caret, caret);
}
将文本框id和插入符号位置传递给此函数。
https://stackoverflow.com/questions/512528
复制相似问题