JavaScript setSelectionRange()方法和游标位置

时间:2012-04-16 19:05:38

标签: javascript

我有以下JavaScript用于动态插入unicode字符(由txtToIns变量在下面表示)到文本正文中

elmt.value = elmt.value.substring(0, elmt.selectionStart) + txtToIns + " " + elmt.value.substring(elmt.selectionStart, elmt.selectionEnd) + elmt.value.substring(elmt.selectionEnd, elmt.value.length) + " ";
elmt.focus();
elmt.value = elmt.value.trim();

使用上面的光标始终位于文本的末尾。有什么办法可以在txtToIns之后直接放置它吗?不,txtToIns.focus()不起作用

2 个答案:

答案 0 :(得分:6)

我不确定你要对textarea值中的空格字符做什么,特别是最后一行将在两行之后再次删除,所以我忽略了下面代码中的空格。我也不确定你要对之前选择的文本(如果有的话)做什么,所以我假设你想用新文本覆盖它。

请记住,这不适用于IE< 9,不支持selectionStartselectionStartsetSelectionRange()

演示:http://jsfiddle.net/timdown/wPfVn/

代码:

var val = elmt.value;
var start = elmt.selectionStart, end = elmt.selectionEnd;
elmt.value = val.slice(0, start) + txtToIns + val.slice(end);
elmt.focus();
var caretPos = start + txtToIns.length;
elmt.setSelectionRange(caretPos, caretPos);

答案 1 :(得分:1)

更改值时,光标将移至末尾。更改其值后,您必须手动重置光标位置。

试试这个:

var start = elmt.selectionStart,
    len   = txtToIns.length,
    pos   = start + len;
elmt.value = elmt.value.substring(0, start) + txtToIns + " " + elmt.value.substring(start) + " ";
elmt.focus();
elmt.value = elmt.value.trim();
elmt.setSelectionRange( pos, pos, 0 );

我还在设置值的行中清除了一些不必要的逻辑。希望我没有破坏任何东西,但如果我这样做,只需恢复原来的路线。