5

我有以下一段 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() 不起作用

4

2 回答 2

10

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

请记住,这在 IE < 9 中不起作用,它不支持selectionStart,selectionEnd也不支持setSelectionRange().

演示: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);
于 2012-04-16T21:07:45.020 回答
2

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

尝试这个:

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 );

我还在设置值的行中清理了一些不必要的逻辑。希望我没有破坏任何东西,但如果我这样做了,就恢复到原来的行。​</p>

于 2012-04-16T19:14:27.597 回答