公司中台使用UEditor替换了年久失修的eWebEditor,虽然UEditor也早已停止维护,但现在可选择的富文本编辑并不多,实际使用对代码还是有很多调整,记录备忘。

1、屏蔽编辑器自动将div标签替换为p标签

ueditor.config.js

,allowDivTransToP:false      //允许进入编辑器的div标签自动变成p标签

2、白名单增加视频设置

ueditor.config.js

source: ['src', 'type'],
embed:  ['type', 'class', 'pluginspage', 'src', 'width', 'height', 'align', 'style', 'wmode', 'play','_src','_url','loop', 'menu', 'allowscriptaccess', 'allowfullscreen']

3、清理多余的字体设置

ueditor.all.min.js修改

setContent: function (html, isAppendTo, notFireSelectionchange) { 
​    var me = this;

替换为

setContent: function (html, isAppendTo, notFireSelectionchange) { 
​    html = html.replace(/font-family:[^;']*(;)?/g,"");
​    var me = this;

4、避免dl dt dd标签替换,li标签不自动加class

case 'dl':
  node.tagName = 'ul';
  break;
case 'dt':
case 'dd':
  node.tagName = 'li';
  break;
case 'li':
  var className = node.getAttr('class');
  if (!className || !/list\-/.test(className)) {
    node.setAttr()
  }
  var tmpNodes = node.getNodesByTagName('ol ul');
  UE.utils.each(tmpNodes, function (n) {
    node.parentNode.insertAfter(n, node);
  });
  break;

替换为

case 'dl':
  //node.tagName = 'ul';
  break;
case 'dt':
case 'dd':
  //node.tagName = 'li';
  break;
case 'li':
  // var className = node.getAttr('class');
  // if (!className || !/list\-/.test(className)) {
  //     node.setAttr()
  // }
  // var tmpNodes = node.getNodesByTagName('ol ul');
  // UE.utils.each(tmpNodes, function (n) {
  //     node.parentNode.insertAfter(n, node);
  // });
break;

5、li标签里面不嵌套p标签

注释掉以下代码

 //进入编辑器的li要套p标签
 me.addInputRule(function(root){
  // utils.each(root.getNodesByTagName('li'),function(li){
  //     var tmpP = UE.uNode.createElement('p');
  //     for(var i= 0,ci;ci=li.children[i];){
  //         if(ci.type == 'text' || dtd.p[ci.tagName]){
  //             tmpP.appendChild(ci);
  //         }else{
  //             if(tmpP.firstChild()){
  //                 li.insertBefore(tmpP,ci);
  //                 tmpP = UE.uNode.createElement('p');
  //                 i = i + 2;
  //             }else{
  //                 i++;
  //             }

  //         }
  //     }
  //     if(tmpP.firstChild() && !tmpP.parentNode || !li.firstChild()){
  //         li.appendChild(tmpP);
  //     }
  //     //trace:3357
  //     //p不能为空
  //     if (!tmpP.firstChild()) {
  //         tmpP.innerHTML(browser.ie ? '&nbsp;' : '<br/>')
  //     }
  //     //去掉末尾的空白
  //     var p = li.firstChild();
  //     var lastChild = p.lastChild();
  //     if(lastChild && lastChild.type == 'text' && /^\s*$/.test(lastChild.data)){
  //         p.removeChild(lastChild)
  //     }
  // });