我们在使用ueditor回写文本有时会出现本该是标签,却直接变成了文本写入到了输入框,并且每一次提交都会追加一个标签
这是因为你保存于数据库的文本标签是经过转义的,如:<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;,
这些转义字符在经过 ueditor.all.js 的 setContent 转换成标签的时候会直接变成文本回写到输入框中,而每一次回写setContent 都会自动给你添加一个p标签,此时我们
要提前转义成标签,让ueditor在回写的时候就认为这是一个标签,而不是转义成文本回写到输入框,当你有标签返回的时候ueditor就不会再添加p标签
setContent: function (html, isAppendTo, notFireSelectionchange) { html = strDiscode(html); //转义传入的文本 var me = this; me.fireEvent('beforesetcontent', html); var root = UE.htmlparser(html); //此处将html文本转换成uNode节点,若未转义则会变成文本直接写入输入框 me.filterInputRule(root); html = root.toHtml(); //此处转义节点内的文本内容 me.body.innerHTML = (isAppendTo ? me.body.innerHTML : '') + html; function isCdataDiv(node){ return node.tagName == 'DIV' && node.getAttribute('cdata_tag'); } //给文本或者inline节点套p标签 if (me.options.enterTag == 'p') { var child = this.body.firstChild, tmpNode; if (!child || child.nodeType == 1 && (dtd.$cdata[child.tagName] || isCdataDiv(child) || domUtils.isCustomeNode(child) ) && child === this.body.lastChild) { this.body.innerHTML = '<p>' + (browser.ie ? ' ' : '<br/>') + '</p>' + this.body.innerHTML; } else { var p = me.document.createElement('p'); while (child) { while (child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName])) { tmpNode = child.nextSibling; p.appendChild(child); child = tmpNode; } if (p.firstChild) { if (!child) { me.body.appendChild(p); break; } else { child.parentNode.insertBefore(p, child); p = me.document.createElement('p'); }