CKeditor剥离字体标记,而不是转换为span

CKeditor剥离字体标记,而不是转换为span,ckeditor,Ckeditor,我有一个CKeditor实例(版本4.1.2),它的工具栏上有字体、大小、文本和背景色按钮,所有这些都是完全默认的 它是通过替换从数据库加载内容的创建的 当加载的html包含以下元素时: <h3><font color="red">Big Red Heading</font></h3> …这就是为什么我希望它会自动转换字体标记的原因。默认情况下,CKEditor没有定义所有可能的转换。有一套,将来会扩大,但这个具体的还没有定义 发件人: 目前,我

我有一个CKeditor实例(版本4.1.2),它的工具栏上有字体、大小、文本和背景色按钮,所有这些都是完全默认的

它是通过替换从数据库加载内容的
创建的

当加载的html包含以下元素时:

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

…这就是为什么我希望它会自动转换字体标记的原因。

默认情况下,CKEditor没有定义所有可能的转换。有一套,将来会扩大,但这个具体的还没有定义

发件人:

目前,我们只为少数编辑器功能定义了内容转换,但在未来的版本中,它们的数量将增加

因此,有两种解决方案:

  • 如果要保留
    font
    标记,请通过定义和更改
    font
    插件设置来扩展高级内容过滤器设置,如中所示
  • 如果要将
    font
    标记自动转换为新的等效标记,则可以添加新的转换。阅读更多文档

  • 我在CKeditor 4中遇到了同样的问题。我搜索了一下,但没有找到答案。但我需要它,所以我用js创建了自己的方法。它工作得很好

    我创建了ownFunctoin:

    函数ConvertFontTagToSpanTag(str){

    var startIndex=str.indexOf(“”);
    var subString1=str.substring(startIndex,(startIndex+endIndex)+1);
    var subString2=subString1;
    var mapObj={
    字号:“字号:”,
    正面:“字体系列:”,
    颜色:“颜色:”
    };
    子字符串2=子字符串2.替换(/size | face | color/gi,功能(匹配){
    返回mapObj[matched];
    });
    subString2=subString2.替换(/['“]/g';');
    subString2=subString2.替换(/=;/g');
    subString2=subString2.replace('font','span');
    如果(子字符串2.length>6){
    subString2=[subString2.slice(0,6),'style=\',subString2.slice(6)].join(“”);
    subString2=[subString2.slice(0,subString2.length-1),“\”,subString2.slice(subString2.length-1)]。连接(“”);
    }
    //转换字体大小
    var sizeIndex=subString2.indexOf('font-size:');
    如果(sizeIndex>=0){
    var sizendindex=subString2.substring(sizeIndex.indexOf(';');
    变量大小=子字符串2.子字符串(sizeIndex+10,(sizeIndex+sizeEndIndex));
    //删除字体大小
    subString2=subString2.slice(0,(sizeIndex+sizeEndIndex)-1)+subString2.slice((sizeIndex+sizeEndIndex));
    //添加字体大小
    subString2=[subString2.slice(0,(sizeIndex+sizeEndIndex)-1),ConvertSpanFontSize(size),subString2.slice((sizeIndex+sizeEndIndex)-1)]。连接(“”);
    }
    //结束
    str=str.replace(子字符串1,子字符串2);
    startIndex=str.indexOf(“”);
    返回str;
    }
    函数大小(大小){
    开关(尺寸){
    案例“1”:返回“0.63em”;
    案例“2”:返回“0.82em”;
    案例“3”:返回“1.0em”;
    案例“4”:返回“1.13em”;
    案例“5”:返回“1.5em”;
    案例“6”:返回“2em”;
    案例“7”:返回“3em”;
    默认值:返回'4em';
    }
    

    干杯…!谢谢你

    谢谢Reinmar。我会考虑添加一个过滤器转换。我已经简单地看了文档参考,但现在对我来说没有任何意义…我不认为你可以发布一个如何做的示例。另外,如果字体标签还没有转换,我不明白def中的“字体”部分是关于什么的启动colorButton_foreStyle(参见问题末尾的编辑)。
    覆盖部分用于转换,但在不同时刻完成(编辑时,而不是加载数据时),由不同的模块实现。这一部分是在ACF之前引入的,目前还没有实现自动化,因为实际上这并不简单:)我稍后会尝试编写此转换。这仍然有效吗?我看到我们的CKEditor有时创建,有时。我们非常需要后者。不确定您的意思。CKEditor只会创建我所需要的t配置为创建。例如,请参见。第二件事是粘贴到CKEditor中的内容会发生什么。这也可以通过手动使用编辑器粘贴事件或使用转换(我在回答中提到)进行控制。
    
    <h3>Big Red Heading</h3>
    
    <h3><span style="color:red">Big Red Heading</span></h3>
    
        CKEDITOR.config.colorButton_foreStyle = {
            element: 'span',
            styles: { 'color': '#(color)' },
            overrides: [ { element: 'font', attributes: { 'color': null } } ]
        };
    
            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';
            }