2016-09-22 36 views
1

感谢您的关注。这里的情况是:ckeditor从代码中删除<br />,无法删除第二个空间

我从包含<br />(两个空格)在具有将被传递给ckreditor,当显示ckreditor改变从代码提供给所述&nbsp元件<br />的内容的客户端接收的代码。由于代码由第三方提供,不能更改(不会创建其他开发人员不会期待的其他步骤,所以我宁愿避免使用基于str_replace的解决方案),因此我们无法删除空间到<br />将其转化为<br />,详见this answer

这里是什么,我收到一个简短的例子:

<h2 dlpe-id="74">El plan perfecto0000 para una promoción única</h2> 
        <br /> 
        <br /> 
        <br /> 
<div class="swiper-container" dlpe-id="78">... 

什么是CKEditor的输出:

<h2 dlpe-id="74">El plan perfecto0000 para una promoci&oacute;n &uacute;nica</h2> 
<br /> 
<br /> 
&nbsp; 
<div class="swiper-container" dlpe-id="78">... 

注意&nbsp。我也在this post中看到配置设置可能是解决此问题的关键。问题结束后会发布我的配置。

任何帮助,以确保<br/>不会变成&nbsp通过调整配置文件或其他方式将不胜感激。

/** 
* @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. 
* For licensing, see LICENSE.md or http://ckeditor.com/license 
*/ 

CKEDITOR.editorConfig = function(config) { 
    // Define changes to default configuration here. 
    // For complete reference see: 
    // http://docs.ckeditor.com/#!/api/CKEDITOR.config 

    // The toolbar groups arrangement, optimized for two toolbar rows. 
    config.toolbarGroups = [ 
     { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, 
     { name: 'editing',  groups: [ 'find', 'selection', 'spellchecker' ] }, 
     { name: 'links' }, 
     { name: 'insert' }, 
     { name: 'forms' }, 
     { name: 'tools' }, 
     { name: 'document', groups: [ 'mode', 'document', 'doctools' ] }, 
     { name: 'others' }, 
     '/', 
     { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] }, 
     { name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] }, 
     { name: 'styles' }, 
     { name: 'colors' }, 
     { name: 'about' } 
    ]; 

    // Remove some buttons provided by the standard plugins, which are 
    // not needed in the Standard(s) toolbar. 
    config.removeButtons = 'Underline,Subscript,Superscript'; 

    // Set the most common block elements. 
    config.format_tags = 'p;h1;h2;h3;pre'; 

    // Simplify the dialog windows. 
    config.removeDialogTabs = 'image:advanced;link:advanced'; 

    config.autoParagraph = false; 

    config.basicEntities = false; 
    config.AllowedContent = "br[clear]"; 


}; 
+0

你是否正在寻找应保持两个空间的'br'元素中的解决方案吗? '
'或者它可以是一个空间吗? – Dekel

+0

嗨德克尔,我不介意只要最后的'
'不是用'&nbsp'替换,谢谢! –

回答

1

以下this bug,它似乎还没有修复(或可能修复并在新版本中返回)。

然而 - 从那里的意见,2个星期前j.swiderski添加评论用代码来解决这个问题:

CKEDITOR.instances.editor1.on('pluginsLoaded', function(evt){ 
    evt.editor.dataProcessor.dataFilter.addRules({ 
     elements :{ 
      br : function(element) {   
       //if next element is BR or <!--cke_br_comment-->, ignore it. 
       if(element && element.next && (element.next.name == 'br' || element.next.value == 'cke_br_comment')){ 
        return; 
       }else { 
        var comment = new CKEDITOR.htmlParser.comment('cke_br_comment'); 
        comment.insertAfter(element); 
       } 
      } 
     } 
    }); 

    evt.editor.dataProcessor.dataFilter.addRules({ 
     elements :{ 
      li : function(element) { 
       if(element && element.next && element.next.name == 'br'){ 
        var nextElem = element.next;   
        while(nextElem.next && nextElem.next.name == 'br'){ 
         nextElem = nextElem.next; 
        } 
        var comment = new CKEDITOR.htmlParser.comment('cke_br_comment'); 
        comment.insertAfter(nextElem);  
       } 
      } 
     } 
    }, 1);//priority defaults to 10 

    evt.editor.dataProcessor.htmlFilter.addRules({ 
     comment : function(value, node) { 
      if(value.indexOf('cke_br_comment') >= 0) { 
       return false; 
      } 
     } 
    }); 

});

这里是一个工作示例:
https://jsfiddle.net/8xpfq4ng/

+0

嗨Dekel,感谢您花时间对此进行编码,这是我们时区工作日的结束,这是一个团队问题,明天早上将采取适当的措施并提供反馈意见。 –

+0

jsfiddle是一个工作示例,您可以将其打开并在源/视图模式之间切换多次,以查看它是如何工作的:)但是,您也可以在明天检查它。 NP。 – Dekel

+0

无论如何,显然必须做upvote,不能离开你9990点... –