解决 UEditor(百度富文本编辑器) 自动给 li标签中的内容加上 p 标签

首次发布:2020-06-08 00:20

使用 UEditor 编辑内容时,当需要一些列表时,如 <ul> 和 <ol> ,列表中的每一项 UEditor 会自动增加 <p> 标签,就算我切换到 HTML 模式下将 <p> 干掉后,再切换可视化状态就会自动又加上 <p> 标签。

解决办法

1、找到ueditor.all.js(我引用的是ueditor.all.js,有的人用的是ueditor.all.min.js)

2、搜索utils.each(root.getNodesByTagName('li'),function(li) 就可以找到以下代码,删掉或注释

//导出时,去掉p标签
//me.getOpt('disablePInList') === true && me.addOutputRule(function(root){
//    utils.each(root.getNodesByTagName('li'),function(li){
//        var newChildrens = [],index=0;
//        utils.each(li.children,function(n){
//            if(n.tagName == 'p'){
//                var tmpNode;
//                while(tmpNode = n.children.pop()) {
//                    newChildrens.splice(index,0,tmpNode);
//                    tmpNode.parentNode = li;
//                    lastNode = tmpNode;
//                }
//                tmpNode = newChildrens[newChildrens.length-1];
//                if(!tmpNode || tmpNode.type != 'element' || tmpNode.tagName != 'br'){
//                    var br = UE.uNode.createElement('br');
//                    br.parentNode = li;
//                    newChildrens.push(br);
//                }

//                index = newChildrens.length;
//            }
//        });
//        if(newChildrens.length){
//            li.children = newChildrens;
//        }
//    });
//});
//进入编辑器的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)
//        }
//    });
//    if(me.options.autoTransWordToList){
//        var orderlisttype = {
//                'num1':/^\d+\)/,
//                'decimal':/^\d+\./,
//                'lower-alpha':/^[a-z]+\)/,
//                'upper-alpha':/^[A-Z]+\./,
//                'cn':/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/,
//                'cn2':/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/
//            },
//            unorderlisttype = {
//                'square':'n'
//            };
//        function checkListType(content,container){
//            var span = container.firstChild();
//            if(span &&  span.type == 'element' && span.tagName == 'span' && /Wingdings|Symbol/.test(span.getStyle('font-family'))){
//                for(var p in unorderlisttype){
//                    if(unorderlisttype[p] == span.data){
//                        return p
//                    }
//                }
//                return 'disc'
//            }
//            for(var p in orderlisttype){
//                if(orderlisttype[p].test(content)){
//                    return p;
//                }
//            }

//        }
//        utils.each(root.getNodesByTagName('p'),function(node){
//            if(node.getAttr('class') != 'MsoListParagraph'){
//                return
//            }

//            //word粘贴过来的会带有margin要去掉,但这样也可能会误命中一些央视
//            node.setStyle('margin','');
//            node.setStyle('margin-left','');
//            node.setAttr('class','');

//            function appendLi(list,p,type){
//                if(list.tagName == 'ol'){
//                    if(browser.ie){
//                        var first = p.firstChild();
//                        if(first.type =='element' && first.tagName == 'span' && orderlisttype[type].test(first.innerText())){
//                            p.removeChild(first);
//                        }
//                    }else{
//                        p.innerHTML(p.innerHTML().replace(orderlisttype[type],''));
//                    }
//                }else{
//                    p.removeChild(p.firstChild())
//                }

//                var li = UE.uNode.createElement('li');
//                li.appendChild(p);
//                list.appendChild(li);
//            }
//            var tmp = node,type,cacheNode = node;

//            if(node.parentNode.tagName != 'li' && (type = checkListType(node.innerText(),node))){

//                var list = UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type) ? 'ol' : 'ul');
//                if(customStyle[type]){
//                    list.setAttr('class','custom_'+type)
//                }else{
//                    list.setStyle('list-style-type',type)
//                }
//                while(node && node.parentNode.tagName != 'li' && checkListType(node.innerText(),node)){
//                    tmp = node.nextSibling();
//                    if(!tmp){
//                        node.parentNode.insertBefore(list,node)
//                    }
//                    appendLi(list,node,type);
//                    node = tmp;
//                }
//                if(!list.parentNode && node && node.parentNode){
//                    node.parentNode.insertBefore(list,node)
//                }
//            }
//            var span = cacheNode.firstChild();
//            if(span && span.type == 'element' && span.tagName == 'span' && /^\s*(&nbsp;)+\s*$/.test(span.innerText())){
//                span.parentNode.removeChild(span)
//            }
//        })
//    }

//});
注意:有的是在P标签下添加li 那li标签会有p标签,这时手动删除p标签即可,再切换可视化状态就会自动又加上 <p> 标签。

原创地址:http://www.luofenming.com/show.aspx?id=ART2020060800001