使用jQuery将光标位置处的文本插入编辑器

使用jQuery将光标位置处的文本插入编辑器,jquery,ckeditor,Jquery,Ckeditor,我正在尝试使用jQuery向现有的CKEditor添加一段文本。 这需要在单击链接时完成 我尝试了这个解决方案,它适用于常规文本区域,但不适用于CKEditor: jQuery.fn.extend({ insertAtCaret: function(myValue) { return this.each(function(i) { if (document.selection) { //For browsers like Internet Explorer

我正在尝试使用jQuery向现有的CKEditor添加一段文本。 这需要在单击链接时完成

我尝试了这个解决方案,它适用于常规文本区域,但不适用于CKEditor:

jQuery.fn.extend({
  insertAtCaret: function(myValue) {
    return this.each(function(i) {
      if (document.selection) {
        //For browsers like Internet Explorer
        this.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
        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(endPos, this.value.length);
        this.focus();
        this.selectionStart = startPos + myValue.length;
        this.selectionEnd = startPos + myValue.length;
        this.scrollTop = scrollTop;
      } else {
        this.value += myValue;
        this.focus();
      }
    })
  }
});
还有一个选项可以使用:
$(“#editor”).val()
,但这会将文本追加到末尾或开头,而不是光标


那么,有没有办法做到这一点呢?

CKEditor本身有一种插入文本的机制。如果您直接更新
文本区域
,实际上您绕过了某些机制,编辑器必须跟踪输入的文本。试试这个:

CKEDITOR.instances.IDofEditor.insertText('some text here');
你应该使用这个

$.fn.insertAtCaret = function (myValue) {
    myValue = myValue.trim();
    CKEDITOR.instances['idofeditor'].insertText(myValue);
};

我想我应该提到的是,如果您使用的是用于ckeditor的jQuery适配器,那么您可以通过jQuery插入文本,这样看起来更干净一些

$('textarea#id_body').ckeditor().editor.insertText('some text here');
或者如果您正在插入HTML

$('textarea#id_body').ckeditor().editor.insertHtml('<a href="#">text</a>');
$('textarea#id_body').ckeditor().editor.insertHtml(“”);

我需要类似的东西。我使用的是CKEditor 3.6(由于预算),JQuery和Bootstrap。我想要一个按钮列表,当点击到CKeditor的主体中时,可以插入一些文本。我从数据元素创建了一个按钮列表,然后添加了一个单击事件。我的对象是一个带有数据属性的输入按钮,我读取该属性以获取要粘贴的val

.insertText(“texthere”)将为您提供将值放置在光标所在位置所需的操作

$(函数(){
$(“.dataelement”)。单击(函数(){
InsertDataElement($(this.data(“valtxt”));
});
});
函数InsertDataElement(valtxt){
CKEDITOR.instances['FullDescription'].insertText(valtxt);

}
太棒了!非常感谢。我做了一个小改动:
CKEDITOR.instances[$(this.attr(“id”)].insertText(myValue)