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 { '<': '<', '>': '>', '&': '&', '"': '"' }[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 { '<': '<', '>': '>', '&': '&', '"': '"' }[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非同步方法,同时使用多次出现内容不按逻辑显示~,~