【问题标题】:Insert text at the cursor position to a CKEditor using jQuery使用jQuery将光标位置的文本插入CKEditor
【发布时间】:2012-04-30 17:33:10
【问题描述】:

我正在尝试使用 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(),但这会将文本附加到末尾或开头而不是光标处。

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

【问题讨论】:

    标签: jquery ckeditor


    【解决方案1】:

    你应该使用这个

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

    【讨论】:

    • 太棒了!谢谢!我做了一个小改动:CKEDITOR.instances[$(this).attr("id")].insertText(myValue); 这样我就不用担心id了。
    【解决方案2】:

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

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

    More information here

    【讨论】:

    • 你是国王
    【解决方案3】:

    我想我应该提一下,如果您使用的是 ckeditor 的 jQuery 适配器,您可以使用 jQuery 插入文本,这样看起来更简洁。

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

    或者如果您要插入 HTML

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

    【讨论】:

      【解决方案4】:

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

      .insertText("texthere") 将为您提供将值放置在正文中所需的操作。

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

      【讨论】:

        猜你喜欢
        • 2010-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多