百度UEditor自动删除超级链接与外链的方法

作者:袖梨 2022-06-25

UEditor确实是一个强大的编辑器,昨天领导说:

要编辑器的图文内容中,不能有外链/超级链接,需要进行清除。

然后我们这些苦逼的程序员就得屁屁的去改了。我尝试了2种方法

1、采用UEditor的自带的属性:

在ueditor.config.js中启用纯文本粘贴:


代码如下 复制代码
,pasteplain:true //是否默认为纯文本粘贴。false为不使用纯文本粘贴,true为使用纯文本粘贴
// 纯文本粘贴模式下的过滤规则
, 'filterTxtRules' : function(){
function transP(node){
node.tagName = 'p';
node.setStyle();
}
return {
////直接删除及其字节点内容
'a': { $: {} },
//'-' : 'script style object iframe embed input select',
//'p': {$:{}},
//'br':{$:{}},
//'div':{'$':{}},
//'li':{'$':{}},
//'caption':transP,
//'th':transP,
//'tr':transP,
//'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,
//'td':function(node){
// //没有内容的td直接删掉
// var txt = !!node.innerText();
// if(txt){
// node.parentNode.insertAfter(UE.uNode.createText(' '),node);
// }
// node.parentNode.removeChild(node,node.innerText())
//}
}
}()

这个会有问题,就是即使没有外链,文本都没有格式了。否了。

2、UEditor提供的命令和事件

参考详细文档:http://ueditor.*ba**idu.com/doc/

这个需要在调用的Ueditor的时候定义事件:

代码如下 复制代码
var editor;
editor = UE.getEditor('container', {
autoHeight: false,imagePopup:true
});
editor.addListener('contentChange', function () {
editor.queryCommandValue("unlink");
})
editor.addListener('ready', function (editor) {
//获取数据方法
});

这个是有问题的,因为在contentChange的时候,方法调用了,但是editor.queryCommandValue("unlink");根本无效。 我跟踪了一下js代码,发现editor.queryCommandValue("unlink");的unlink会对选择区域进行判断,所以如果没有选择区域的话,这个方法是不执行的。

但是我也没怎么选择区域。

代码如下 复制代码

UE.commands['unlink'] = {
execCommand: function () {
//var as= editor.selection.getNative();
var range = this.selection.getRange(),
bookmark;
if(range.collapsed && !domUtils.findParentByTagName( range.startContainer, 'a', true )){
return;
}
bookmark = range.createBookmark();
optimize( range );
range.removeInlineStyle( 'a' ).moveToBookmark( bookmark ).select();
},
queryCommandState : function(){
return !this.highlight && this.queryCommandValue('link') ? 0 : -1;
}
};

就是这个 var range = this.selection.getRange(),闹得。。。UEditor里没有找到设置高亮选择的命令和方法,有知道给说一下。

四、换思路了

我最后无奈了,只能在文章编辑完成后取出内容,用判断超级链接/a/http的正则表达式屏蔽掉外链,当然正则表达C#和js都可以,我在这里用的是js。

代码如下 复制代码

aaa.description = editor.getContent();
var reg2 = /(http:\/\/|https:\/\/)((\w|=|\?|\.|\/|&|-)+)/g;
var reg = new RegExp(reg2);
aaa.description = aaa.description.replace(reg, "");

解决问题的思路往往就是这样,从最理想的开始,到最无奈的结束。

相关文章

精彩推荐