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.baidu.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, ""); |
解决问题的思路往往就是这样,从最理想的开始,到最无奈的结束。
我的博物馆故事 官方安卓版v1.61.2
我的博物馆故事是一款以消除为主题的经营养成类手游,在这里玩家
专业模拟飞行10 手机版v12.2.4
专业模拟飞行10安卓版是一款飞行休闲手游,顶尖的物理飞行引擎
动物起义战斗模拟器二琳同款 最新版v4.1.1
动物起义战斗模拟器是一个非常有趣的模拟类游戏,玩家可以召唤各
迷你世界七周年 安卓手机版v1.43.0
迷你世界7周年是一款由《迷你世界》官方推出的庆祝特别版本,在
劫后公司无限资源版 v1.0.5.1
劫后公司内置菜单版是游戏的破解版本,在该版本中为玩家提供了内