我有以下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()不起作用
答案 0 :(得分:6)
我不确定你要对textarea值中的空格字符做什么,特别是最后一行将在两行之后再次删除,所以我忽略了下面代码中的空格。我也不确定你要对之前选择的文本(如果有的话)做什么,所以我假设你想用新文本覆盖它。
请记住,这不适用于IE< 9,不支持selectionStart
,selectionStart
或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);
答案 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 );
我还在设置值的行中清除了一些不必要的逻辑。希望我没有破坏任何东西,但如果我这样做,只需恢复原来的路线。