• 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非同步方法,同时使用多次出现内容不按逻辑显示~,~

  • 相关阅读:
    滴滴 cubeui 教程
    继往开来的 sass 3 代编译器:ruby sass、nodesass、dartsass
    研究大佬用 Vue 写的倒计时组件,学到了不少东西
    狠人!标星 3.4 万的项目说删就删,几行代码搞崩数万个开源项目
    本人EE知识体系导航 Embedded menu
    PMP之思维――我的PMP备考之旅
    总有些瞬间,能温暖整个曾经
    不是一辈子的人,不说一辈子的话
    QImage对一般图像的处理
    从零开始系统深入学习android(已完成部分的目录带链接)
  • 原文地址:https://www.cnblogs.com/huhangfei/p/6023594.html
Copyright © 2020-2023  润新知