2013-07-13 41 views
2

我有字体,大小,文字和背景颜色按钮的CKEDITOR实例(4.1.2版)的工具栏,完全的默认英寸CKEDITOR剥离字体标记,而不是转化为跨越

它通过更换创造了一个<textarea>其内容从数据库中被加载。

当加载HTML包含元素,如:

<h3><font color="red">Big Red Heading</font></h3> 

CKEDITOR简直是剥离了标签,离开:

<h3>Big Red Heading</h3> 

然而,我的预期(根据文档)分别是它应该将其转换为:

<h3><span style="color:red">Big Red Heading</span></h3> 

(它剥离具有大小和面部属性的标签同样,也是如此)。

我没有改变allowedContentcolorButton_foreStyle,或任何其他配置设置,应该对这个问题有任何影响。我尝试删除所有自定义配置(保留编辑器的绝对默认实例),但它仍然发生。

任何人都可以解释为什么这可能发生,以及如何解决它?

谢谢。


编辑:中colorButton_foreStyle默认值在CKEDITOR源设置是这样的:

CKEDITOR.config.colorButton_foreStyle = { 
     element: 'span', 
     styles: { 'color': '#(color)' }, 
     overrides: [ { element: 'font', attributes: { 'color': null } } ] 
    }; 

...这就是为什么我希望它会自动转换字体标记..?

回答

3

的CKEditor还没有得到默认定义的所有可能的变换。有一套,它将在未来扩大,但这个具体的一个还没有定义。

Advanced Content Filter guide - content transformations

目前,我们已经定义的内容转换为唯一的编辑器功能少数,但其数量将在未来版本中增加。

因此,有两种解决方案:

  1. 如果你想让你的font标签,然后通过定义config.extraAllowedContent延长高级内容过滤器设置,并在HTML output sample改变,如font插件的设置。
  2. 如果你想自动改变你font标签的新的等价物,那么你可以添加一个新的转变。详情请参阅filter#addTransformations doc。
+0

感谢Reinmar。我会考虑添加一个过滤器转换。我已经简要地看过了文档参考资料,但现在没有一个对我有任何意义......我不认为你可以发表一个如何去做的例子吗?另外,如果FONT标签还没有转换,我不明白colorButton_foreStyle的定义中的'font'部分是什么(请参阅我的问题最后的编辑)。 – Doin

+0

'overrides'部分用于转换,但是在不同的时刻(在编辑时,而不是在加载数据时)通过不同的模块完成。这部分是在ACF之前推出的,并且还没有实现自动化,因为实际上它不是微不足道的:) 我将尽力在稍后编写此转换。 – Reinmar

+0

非常感谢您的帮助! – Doin

2

我CKEDITOR 4.我搜索了相同的问题,但我没有得到解决。但我需要它,所以我在js中创建了自己的方法。它的工作很棒。

我创建ownFunctoin:

功能ConvertFontTagToSpanTag(STR){

 var startIndex = str.indexOf('<font'); 
     while (startIndex >= 0) {    

      var endIndex = str.substring(startIndex).indexOf('>'); 
      var subString1 = str.substring(startIndex, (startIndex + endIndex) + 1); 
      var subString2 = subString1;    

      var mapObj = { 
       size: "font-size:", 
       face: "font-family:", 
       color: "color:" 
      }; 
      subString2 = subString2.replace(/size|face|color/gi, function (matched) { 
       return mapObj[matched]; 
      }); 

      subString2 = subString2.replace(/['"]/g, ';'); 
      subString2 = subString2.replace(/=;/g, ''); 

      subString2 = subString2.replace('font', 'span'); 
      if (subString2.length > 6) { 
       subString2 = [subString2.slice(0, 6), 'style=\"', subString2.slice(6)].join(''); 
       subString2 = [subString2.slice(0, subString2.length - 1), '\"', subString2.slice(subString2.length - 1)].join(''); 
      } 

      //Converting Font-size   
      var sizeIndex = subString2.indexOf('font-size:'); 
      if (sizeIndex >= 0) { 
       var sizeEndIndex = subString2.substring(sizeIndex).indexOf(';'); 
       var size = subString2.substring(sizeIndex + 10, (sizeIndex + sizeEndIndex)); 
       //Removing Font size 
       subString2 = subString2.slice(0, (sizeIndex + sizeEndIndex) - 1) + subString2.slice((sizeIndex + sizeEndIndex));     
       //Adding Font Size 
       subString2 = [subString2.slice(0, (sizeIndex + sizeEndIndex)-1), ConvertSpanFontSize(size), subString2.slice((sizeIndex + sizeEndIndex)-1)].join(''); 

      } 
      //end 

      str = str.replace(subString1, subString2); 

      startIndex = str.indexOf('<font');    

     } 
     str = str.replace(/font>/g, 'span>'); 
     return str; 

    } 

    function ConvertSpanFontSize(size) { 
     switch (size) { 
      case '1': return '0.63em'; 
      case '2': return '0.82em'; 
      case '3': return '1.0em'; 
      case '4': return '1.13em'; 
      case '5': return '1.5em'; 
      case '6': return '2em'; 
      case '7': return '3em';     
      default: return '4em'; 
     } 

...干杯!谢谢