5

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

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

  2. 从 Word 粘贴通常会创建“ <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;
};

我尝试过这种 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 on paste 事件、与 Ckeditor 交互的函数或通过 ACF 使这项工作。请不要建议在保存时在 PHP 中执行此操作,我认为这是最后的手段,并且可以自己执行此操作。

谢谢!

4

2 回答 2

12

经过大量调试后想通了。问题中的方法实际上是正确的,但我错误地认为 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);
});
于 2013-07-04T14:49:21.260 回答
0

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

p:not(:first-child):empty {
    display:none
}
p:not(:first-child) > br {
    display:none
}
于 2017-10-04T16:54:16.257 回答