ckeditor 敏感词标记显示处理方法

直接在原型添加方法:

(function () {
    /*
    *      取消所有高亮
    */
    CKEDITOR.editor.prototype.CancleSensitiveWordsHighlight = function () {
        var regstrEpswh = '<span class="ep_ckeditor_sensitivewords" style="background-color:[^<>:]+[;]*">([^<>]+)<\\/span>';
        var htmlEpswh = this.getData();
        htmlEpswh = htmlEpswh.replace(eval("/" + regstrEpswh + "/ig"), "$1");
        if (this.document != null)
            this.document.getBody().setHtml(htmlEpswh);
        return htmlEpswh;
    }
    /*
    *    epswhlwords 敏感词
    *    epswhligChar 敏感词中忽略的特殊字符
    *    epswhlcolor 高亮底色
    */
    CKEDITOR.editor.prototype.SensitiveWordsHighlight = function (epswhlwords, epswhligChar, epswhlcolor) {
        //空的字符串
        if (typeof epswhlwords == "string" && !epswhlwords)
            return;
        //空数组
        if (typeof epswhlwords == "object" && epswhlwords[0] == undefined)
            return;
        var htmlEpswh = this.getData();
        //高亮模板
        var highLighCOde = '<span class="ep_ckeditor_sensitivewords" style="background-color:{$color};">{$word}</span>';
        if (!epswhlcolor)
            epswhlcolor = "#ffff00";
        highLighCOde = highLighCOde.replace("{$color}", epswhlcolor);
        //如果内容中有高亮内容先进行清理
        if (htmlEpswh.indexOf('ep_ckeditor_sensitivewords') > -1) {
            htmlEpswh = this.CancleSensitiveWordsHighlight();
        }
        //重新高亮
        var epswhlkeyWords = [];
        if (typeof epswhlwords == "string")
            epswhlkeyWords = epswhlwords.split(',');
        else
            epswhlkeyWords = epswhlwords;
        //需要忽略的分隔符
        if (epswhligChar && epswhligChar.length > 0) {
            epswhligChar = epswhligChar.replace(/[<>&"]/g, function (c) { return { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;' }[c]; });
            epswhligChar = "[" + epswhligChar + "]*";
        } else {
            epswhligChar = '';
        }
        for (var i = 0; i < epswhlkeyWords.length; i++) {
            var allkey = epswhlkeyWords[i].split('');
            var regstr = allkey.join(epswhligChar);
            regstr = "(" + regstr + ")";
            var reg = eval("/" + regstr + "/ig");
            var hcode = highLighCOde.replace("{$word}", "$1");
            htmlEpswh = htmlEpswh.replace(reg, hcode);
        }
        //document 对象在源码模式无效,this.setData是重新加载,不是同步方法,不能使用
        if (this.document!=null)
            this.document.getBody().setHtml(htmlEpswh);
    }
    
})();

或者添加插件:

CKEDITOR.plugins.add('sensitivewordshighlight', {
    init: function (editor) {
        /*
        *      取消所有高亮
        */
        editor.CancleSensitiveWordsHighlight=function () {
             var regstrEpswh = '<span class="ep_ckeditor_sensitivewords" style="background-color:[^<>:]+[;]*">([^<>]+)<\\/span>';
             var htmlEpswh = this.getData();
             htmlEpswh = htmlEpswh.replace(eval("/" + regstrEpswh + "/ig"), "$1");
             if (this.document != null)
                 this.document.getBody().setHtml(htmlEpswh);
             return htmlEpswh;
        }
        /*
        *    words 敏感词
        *    igChar 敏感词中忽略的特殊字符
        *    color 高亮底色
        */
        editor.SensitiveWordsHighlight = function (epswhlwords, epswhligChar, epswhlcolor) {
            //空的字符串
            if (typeof epswhlwords == "string" && !epswhlwords)
                return;
            //空数组
            if (typeof epswhlwords == "object" && epswhlwords[0] == undefined)
                return;
            var htmlEpswh = this.getData();
            //高亮模板
            var highLighCOde = '<span class="ep_ckeditor_sensitivewords" style="background-color:{$color};">{$word}</span>';
            if (!epswhlcolor)
                epswhlcolor = "#ffff00";
            highLighCOde = highLighCOde.replace("{$color}", epswhlcolor);
            //如果内容中有高亮内容先进行清理
            if (htmlEpswh.indexOf('ep_ckeditor_sensitivewords') > -1) {
                htmlEpswh = this.CancleSensitiveWordsHighlight();
            }
            //重新高亮
            var epswhlkeyWords = [];
            if (typeof epswhlwords == "string")
                epswhlkeyWords = epswhlwords.split(',');
            else
                epswhlkeyWords = epswhlwords;
            //需要忽略的分隔符
            if (epswhligChar && epswhligChar.length > 0) {
                epswhligChar = epswhligChar.replace(/[<>&"]/g, function (c) { return { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;' }[c]; });
                epswhligChar = "[" + epswhligChar + "]*";
            } else {
                epswhligChar = '';
            }
            for (var i = 0; i < epswhlkeyWords.length; i++) {
                var allkey = epswhlkeyWords[i].split('');
                var regstr = allkey.join(epswhligChar);
                regstr = "(" + regstr + ")";
                var reg = eval("/" + regstr + "/ig");
                var hcode = highLighCOde.replace("{$word}", "$1");
                htmlEpswh = htmlEpswh.replace(reg, hcode);
            }
            //document 对象在源码模式无效,this.setData是重新加载,不是同步方法,不能使用
            if (this.document != null)
                this.document.getBody().setHtml(htmlEpswh);
        }
    }
});

启用插件:

config.extraPlugins = "sensitivewordshighlight";

调用:

//设置
CKEDITOR.instances.MYCKDEMO.SensitiveWordsHighlight(["一二","哈哈"], "`~!@#$^&*()=|{}':;',\\[\\]\\.<>/?~!@#¥……&*()—|{}【】‘;:”“'。,、?  ","#FFFF00");
//取消
CKEDITOR.instances.MYCKDEMO.CancleSensitiveWordsHighlight();

 注意:ckeditor 中setData()方法要刷新iframe非同步方法,同时使用多次出现内容不按逻辑显示~,~

posted @ 2016-11-02 16:59  Mr. Hu  阅读(1730)  评论(0编辑  收藏  举报
Map