Ckeditor 4 - 删除从Word粘贴后<p> </p>

时间:2013-07-03 11:55:35

标签: javascript ckeditor

当从Word粘贴时,Ckeditor 4中的清理通常非常好。但是,当Word文档格式不理想时,我注意到了两件事:

  1. 如果Word文档包含“&nbsp;&nbsp;”,则会在Ckeditor中复制。我想简单地在粘贴上插入“”。

  2. 从Word粘贴通常会创建“<p>&nbsp;</p>”。我已使用fillEmptyBlocks = false部分解决了这个问题,这意味着我留下了“<p></p>”。

  3. 我不确定如何添加额外的javascript函数来扩展Ckeditor的功能来解决这些问题。 Ckeditor 4提供了一个高级内容过滤器,但文档坦率地让我感到困惑,目前尚不清楚它是否能够实现上述目标。

    这是我目前的CKeditor config.js:

    CKEDITOR.editorConfig = function( config ) {
        config.toolbar = <removed>;
        config.format_tags = 'p;h2;h3;div';
        config.contentsCss = '/css/site.min.css';
        config.height = 500;
        config.removePlugins = 'elementspath';
        config.resize_enabled = false;
        config.allowedContent = true;
        config.fillEmptyBlocks = false;
    };
    

    我尝试过这种Ckeditor 3风格的方法,但似乎不起作用。 evt.data.dataValue确实包含编辑器中的HTML。

    CKEDITOR.on('instanceReady', function(ev) {
      ev.editor.on('paste', function(evt) { 
        evt.data.dataValue = evt.data.dataValue.replace('&nbsp;','');
        evt.data.dataValue = evt.data.dataValue.replace('<p></p>;','');
        console.log(evt.data.dataValue);
      }, null, null, 9);
    });
    

    答案必须包括通过某种形式的Ckeditor对粘贴事件,与Ckeditor交互的功能或通过ACF进行此工作。请不要建议在PHP中执行此操作 - 保存,我认为这是最后的手段,并且能够自己做。

    谢谢!

2 个答案:

答案 0 :(得分:9)

经过大量调试后计算出来。问题中的方法实际上是现实,但我错误地认为JS替换函数做了全局替换。所以发生的事情只是第一个被删除的实例。以下是使用正则表达式样式语法的修订版本,全局替换:

CKEDITOR.on('instanceReady', function(ev) {
  ev.editor.on('paste', function(evt) { 
    evt.data.dataValue = evt.data.dataValue.replace(/&nbsp;/g,'');
    evt.data.dataValue = evt.data.dataValue.replace(/<p><\/p>/g,'');
    console.log(evt.data.dataValue);
  }, null, null, 9);
});

答案 1 :(得分:0)

我正在使用CKEditor 4.7,就我的情况而言,当我从Gmail粘贴时,它会在最终结果中添加<p><br></p>。在编辑中显示为一个大的空白区域。解决这个问题我在CSS下面使用过。

p:not(:first-child):empty {
    display:none
}
p:not(:first-child) > br {
    display:none
}