layui弹窗关闭时富文本编辑器未销毁导致内存泄漏等问题,根本原因是实例未随DOM清除;type:1需在success中build并保存索引,end中destroy并置null;type:2需子页监听beforeunload或父页end中调用onDestroy;关闭全部弹窗前应遍历清理各类型编辑器实例。

layui弹窗关闭时富文本编辑器残留导致内存泄漏、重复初始化、内容取不到或页面卡顿,根本原因是编辑器实例未随弹层DOM一同销毁。
type:1 弹窗中销毁 layedit 实例
第一步:确保 layedit.build() 在 layer.open 的 success 回调中执行,否则 DOM 尚未挂载,build 失败或绑定到错误节点。
第二步:调用 layedit.build() 时必须保存返回的编辑器索引,例如 var editIndex = layedit.build('myEditor');【不保存这个索引,后续无法销毁】
第三步:在 layer.open 配置中添加 end 回调,在其中调用 layedit.destroy(editIndex)。
第四步:销毁后清空变量 editIndex = null,防止被意外复用。
type:2 iframe 弹窗中销毁 tinymce 实例
方法一:在子页面(如 edit.html)内部监听 window.beforeunload 或自定义销毁信号
在子页 JS 中写:if (tinymce.get('content')) { tinymce.get('content').destroy(false); }
方法二:父页通过 end 回调主动通知子页销毁
在 layer.open 的 end 中执行:
const iframe = layero.find('iframe')[0];<br>try { iframe.contentWindow.onDestroy?.(); } catch(e) {}
【子页必须提前暴露 window.onDestroy 函数,否则调用无效】
统一销毁策略:关闭所有弹窗时批量清理
调用 layer.closeAll() 前,遍历当前所有打开的弹窗索引,对每个弹窗检查其 content 是否含富文本容器,若有则按类型分别销毁:
— 若为 type:1 且含 textarea[id^="layedit"],用 layedit.getIndex(id) 获取索引后 destroy
— 若为 type:2,向对应 iframe.contentWindow 发送 onDestroy 调用
— 同时清除全局缓存的 editIndex 变量或 DOM data 属性











