使用jQuery将光标位置的文本插入CKEditor

时间:2012-04-19 08:12:29

标签: jquery ckeditor

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

我试过这个解决方案,它适用于普通的textareas,但不适用于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(),但这会将文本添加到结尾或开头,而不是光标。

那么,有没有办法实现这个目标?

4 个答案:

答案 0 :(得分:37)

你应该使用这个

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

答案 1 :(得分:16)

CKEditor本身有一个插入文本的机制。如果直接更新textarea,则实际上绕过了CKEditor必须跟踪输入文本的一些机制。试试这个:

CKEDITOR.instances.IDofEditor.insertText('some text here');

More information here

答案 2 :(得分:4)

我想我应该提一下,如果你使用cQuery编辑器的jQuery适配器,你可以用这种方式插入文本,看起来更清晰。

$('textarea#id_body').ckeditor().editor.insertText('some text here');

或者如果您要插入HTML

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

答案 3 :(得分:0)

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

.insertText("textthere") 将为您提供将光标所在位置的值放入正文所需的操作。

$(function () {
  $(".dataelement").click(function () {
          InsertDataElement($(this).data("valtxt"));
      });
});
function InsertDataElement(valtxt) {
    CKEDITOR.instances['FullDescription'].insertText(valtxt);
}