将值插入到游标所在的TEXTAREA中

san*_*nta 20 javascript jquery

我有一个textarea和一个带有值的div.当我点击一个值时,我将其插入textarea.我需要将它插入我的光标在textarea中的位置.为什么我说WAS?因为当我将其移出并单击要插入的值时,我认为它在文本区域中失去焦点.

所以,我的问题是,有没有办法"记住"textarea中的最新光标位置,然后在该位置插入我的值?

也许它可能是字符串中的字符编号?..目前我添加如下:

input.val( function( i, val ) { return val + " " + myInsert + " "; } );
Run Code Online (Sandbox Code Playgroud)

我也使用jQuery,也许我可以使用它?

Tim*_*own 17

我编写了一个跨浏览器的jQuery插件,用于处理textareas中的插入/选择和称为Rangy输入的文本输入(可怕的名字,我真的应该想到更好的一个).这种方法的组合和Edgar Villegas Alvarado的答案中的技巧应该可以解决问题,尽管在IE中,focusout事件发生得太晚,你需要使用专有beforedeactivate事件:

var $textBox = $("#foo");

function saveSelection(){
    $textBox.data("lastSelection", $textBox.getSelection());
}

$textBox.focusout(saveSelection);

$textBox.bind("beforedeactivate", function() {
    saveSelection();
    $textBox.unbind("focusout");
});
Run Code Online (Sandbox Code Playgroud)

稍后插入文本时,以下内容将在前一个光标位置插入文本(或覆盖以前选择的文本,如果用户选择了任何文本):

var selection = $textBox.data("lastSelection");
$textBox.focus();
$textBox.setSelection(selection.start, selection.end);
$textBox.replaceSelectedText("Some new text");
Run Code Online (Sandbox Code Playgroud)

请参见这里的jsFiddle示例:http://jsfiddle.net/rQXrJ/1/

  • 完善!非常感谢! (3认同)
  • @santa:...完成. (2认同)