我有以下一段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()无法正常工作

最佳答案

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

请记住,这在IE selectionStart,selectionStartsetSelectionRange())中不起作用。

演示: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);

10-05 20:36