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

浙公网安备 33010602011771号