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

Ben*_*Ben 3 javascript ckeditor

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

  1. 如果Word文档包含" &nbsp;&nbsp;",则会在Ckeditor中复制.我想简单地" on paste.

  2. Pasting from Word often creates "<p>&nbsp;</p>".我通过使用部分解决了这个问题fillEmptyBlocks = false,这意味着我留下了" <p></p>".

我不确定如何添加额外的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;
};
Run Code Online (Sandbox Code Playgroud)

我尝试过这种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);
});
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

Ben*_*Ben 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);
});
Run Code Online (Sandbox Code Playgroud)