要完全关闭 UEditor 自动修改代码的所有功能,需要禁用 UEditor 内部的自动格式化和清理规则。
这涉及到修改 UEditor 的配置和相关插件,以下是一些我亲测的方法:
方法一:禁用自动清理和格式化规则
在插件代码中禁用自动清理和格式化规则,例如 basestyle 插件。
可以直接修改插件代码以禁用这些功能。
修改 basestyle 插件,注释掉或删除不需要的代码:
UE.plugins.basestyle = function () { var e = {bold: ["strong", "b"], italic: ["i", "em"], subscript: ["sub"], superscript: ["sup"]}, t = function (e, t) { return domUtils.filterNodeList(e.selection.getStartElementPath(), t); }, n = this; n.addshortcutkey({Bold: "ctrl+66", Italic: "ctrl+73", Underline: "ctrl+85"}); // 注释掉或删除自动格式化规则 /* n.addInputRule(function (e) { utils.each(e.getNodesByTagName("b i"), function (e) { switch (e.tagName) { case "b": e.tagName = "strong"; break; case "i": e.tagName = "em"; } }); }); */ for (var i in e) !function (e, i) { n.commands[e] = { execCommand: function (e) { var o = n.selection.getRange(), r = t(this, i); if (o.collapsed) { if (r) { var a = n.document.createTextNode(""); o.insertNode(a).removeInlineStyle(i), o.setStartBefore(a), domUtils.remove(a); } else { var s = o.document.createElement(i[0]); "superscript" != e && "subscript" != e || (a = n.document.createTextNode(""), o.insertNode(a).removeInlineStyle(["sub", "sup"]).setStartBefore(a).collapse(!0)), o.insertNode(s).setStart(s, 0); } o.collapse(!0); } else "superscript" != e && "subscript" != e || r && r.tagName.toLowerCase() == e || o.removeInlineStyle(["sub", "sup"]), r ? o.removeInlineStyle(i) : o.applyInlineStyle(i[0]); o.select(); }, queryCommandState: function () { return t(this, i) ? 1 : 0; } }; }(i, e[i]); };
方法二:禁用自动保存和格式化
在 UEditor 的配置文件(通常是 ueditor.config.js)中,设置相关配置项以禁用自动保存和格式化功能。
window.UEDITOR_CONFIG = { // 禁用自动保存 enableAutoSave: false, // 设置保存间隔为很长的时间,实际上禁用了自动保存 saveInterval: 86400 * 1000, // 禁用自动格式化 pasteplain: true, autotypeset: { removeEmptyline: false, removeClass: false, removeEmptyNode: false, textAlign: false, imageBlockLine: false, pasteFilter: false, clearFontSize: false, clearFontFamily: false, removeEmptyline: false, mergeEmptyline: false, indent: false, indentValue: '0', bdc2sb: false, tobdc: false, }, // 保留标签和属性 filterRules: {} };
方法三:禁用粘贴过滤
可以禁用粘贴过滤功能,防止在粘贴内容时自动格式化
UE.plugins.paste = function () { var me = this; me.commands['paste'] = { execCommand: function () { // 禁用粘贴过滤功能 // 将内容原样插入,不进行任何处理 } }; };
方法四:定制过滤规则
可以通过定制过滤规则来控制 UEditor 的行为
UE.plugins['filter'] = function () { var me = this; me.addInputRule(function (root) { // 禁用所有过滤规则 }); me.addOutputRule(function (root) { // 禁用所有输出规则 }); };