javascript - CKEditor 4 简码替换

标签 javascript ckeditor shortcode

我正在尝试制作一个短代码“插件”——类似于 Wordpress 与 TinyMce 一起使用的插件。我希望用户能够通过按钮插入短代码(如 [gallery id="3"][image id="9"]),然后然后显示一个占位符而不是实际的短代码。一旦我让它工作,我会把所有代码放到 github 上。

当前设置

我有一个按钮,它使用 insertHtml() 将 html 插入编辑器,如下所示:

// Custom button code
CKEDITOR.instances['editor_instance_name'].insertHtml '<div class="media-library-gallery">[gallery id=' + gallery_id + ']</div>'

并且我添加了 extraAllowedContent 以允许 div 包含我需要的类:

// CKEditor configuration (config.js)
config.extraAllowedContent = 'div(media-library-image,media-library-gallery)';

我使用下面的代码成功地将 div.media-library-gallery 替换为图像:

(function() {
  CKEDITOR.plugins.add('media_gallery', {

    init: function(editor) {
      CKEDITOR.addCss('.media_gallery{background: #f2f8ff url("/assets/gallery.png") no-repeat scroll center center; border: 1px dashed #888; display: block; width:100%; height: 250px;}');
    },

    afterInit: function( editor ) {
      var dataProcessor = editor.dataProcessor;
      var dataFilter = dataProcessor && dataProcessor.dataFilter;

      dataFilter.addRules({
        elements: {
          'div': function(element) {
            if (element.attributes.class == "media-library-gallery") {
              var fakeElement = editor.createFakeParserElement(element, 'media_gallery', 'div', false);
              return fakeElement;
            }
          }
        }
      })

    }

  })
})();

问题

目前替换在段落标签内嵌套了一个 div:

<p>
  <div class="media-library-gallery">[gallery id="5"]</div>
</p>

Shortcode replacement bug

我不想更改默认 CKEDITOR.ENTER_P 中的 enterMode,但我想摆脱周围的 p。我可以使用 insertHtml 或编写一个规则来为我执行此操作吗?欢迎任何其他建议。

我一直在挖掘 http://docs.ckeditor.com/寻求解决方案/灵感,但运气不佳。

最佳答案

有点晚了,但请尝试将您的 div 作为元素插入:

var element = CKEDITOR.dom.element.createFromHtml('<div class="media-library-gallery">[gallery id=' + gallery_id + ']</div>');
CKEDITOR.instances['editor_instance_name'].insertElement(element);

关于javascript - CKEditor 4 简码替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23027875/

相关文章:

javascript - 显示小时

javascript - 如何从封闭的 Javascript 函数访问变量?

ckeditor - 如何在 ASP.net 项目中使用 CKEditor 4.5.7

expressionengine - EE 替代 WordPress 短代码?

javascript - 如何简单地将方法导出到另一个 .js 文件以包含在 &lt;script&gt; 标记中?

javascript - 为什么 CKEditor 删除链接和属性

css - 如何应用ckeditor css输出

php - CF7DB-extension 的短代码内的短代码(Wordpress Contact form 7 到数据库插件)

javascript - 单击时,将短代码/bbcode 添加到文本区域?

javascript - 声明图表上 Highcharts 条形的位置?