Jquery 在文本区域中光标位置后插入文本

Jquery 在文本区域中光标位置后插入文本,jquery,textarea,javascript,Jquery,Textarea,Javascript,下面的脚本将文本插入到文本区域的末尾。我需要换成 在文本区域中当前光标位置后插入文本 jQuery(document).ready(function($){ $('#addCommentImage').click(function(){ var imageLoc = prompt('Enter the Image URL:'); if ( imageLoc ) { $('#comment').val($('#comment').va

下面的脚本将文本插入到文本区域的末尾。我需要换成 在文本区域中当前光标位置后插入文本

jQuery(document).ready(function($){
    $('#addCommentImage').click(function(){
        var imageLoc = prompt('Enter the Image URL:');
        if ( imageLoc ) {
            $('#comment').val($('#comment').val() + '[img]' + imageLoc + '[/img]');
        }
        return false;
    });
});

你可以结账。
insertcaret
jquery插件看起来很不错。

我修改了这些插件的不同版本,提出了一个版本,将第一个文本放在所选内容之前,将第二个文本放在所选内容之后,并保持所选内容仍处于选中状态。这适用于chrome和FF,但不适用于IE

jQuery.fn.extend({
insertAtCaret: function(myValue, myValueE){
  return this.each(function(i) {
    if (document.selection) {
      //For browsers like Internet Explorer
      this.focus();
      sel = document.selection.createRange();
      sel.text = myValue + myValueE;
      this.focus();
    }
    else if (this.selectionStart || this.selectionStart == '0') {
      //For browsers like Firefox and Webkit based
      var startPos = this.selectionStart;
      var endPos = this.selectionEnd;
      var scrollTop = this.scrollTop;
      this.value = this.value.substring(0,     startPos)+myValue+this.value.substring(startPos,endPos)+myValueE+this.value.substring(endPos,this.value.length);
      this.focus();
      this.selectionStart = startPos + myValue.length;
      this.selectionEnd = ((startPos + myValue.length) + this.value.substring(startPos,endPos).length);
      this.scrollTop = scrollTop;
    } else {
      this.value += myValue;
      this.focus();
    }
  })
    }
});
用法:
$(“#框”).insertcaret(“[选择前]”,“[选择后]”)

另外:不要以任何方式声称这是我的。

如果上述方法不起作用(在我的情况下不起作用-可能我的配置有点不同),下面是另一个解决方案:

您可以使用此扩展功能获取位置:

(function ($, undefined) {
    $.fn.getCursorPosition = function () {
        var el = $(this).get(0);
        var pos = 0;
        if ('selectionStart' in el) {
            pos = el.selectionStart;
        } else if ('selection' in document) {
            el.focus();
            var Sel = document.selection.createRange();
            var SelLength = document.selection.createRange().text.length;
            Sel.moveStart('character', -el.value.length);
            pos = Sel.text.length - SelLength;
        }
        return pos;
    }
})(jQuery);
var content = $('#selector').val();
var newContent = content.substr(0, position) + "text to insert" + content.substr(position);
$('#selector').val(newContent);
用法是:
var position=$(“#选择器”).getCursorPosition()

要在以下位置插入文本:

(function ($, undefined) {
    $.fn.getCursorPosition = function () {
        var el = $(this).get(0);
        var pos = 0;
        if ('selectionStart' in el) {
            pos = el.selectionStart;
        } else if ('selection' in document) {
            el.focus();
            var Sel = document.selection.createRange();
            var SelLength = document.selection.createRange().text.length;
            Sel.moveStart('character', -el.value.length);
            pos = Sel.text.length - SelLength;
        }
        return pos;
    }
})(jQuery);
var content = $('#selector').val();
var newContent = content.substr(0, position) + "text to insert" + content.substr(position);
$('#selector').val(newContent);

仅此而已。

可能的副本实际上链接到一个不起作用的版本。上面的就是你想要的。这是一个提琴感谢,对于Angular JS实现非常有用,因为insertAtCaret()修改在ng模型绑定的情况下不起作用。在光标位置插入文本效果很好。请注意,如果用户选择了一些文本,它将在选择之前插入,而不是替换它(在Chrome中测试)。函数getCursorPosition将更改为
document.getElementById('textarea')。selectionStart
document.getElementById('textarea')。选择End