You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jQuery 3.2.1中DOMSubtreeModified弃用,求替换为MutationObserver方案

替换弃用的DOMSubtreeModified为MutationObserver的解决方案

嗨,别发愁啦!把弃用的DOMSubtreeModified换成MutationObserver其实没那么复杂,我一步步给你讲清楚,毕竟你说编程基础还比较薄弱~

先看你原来的代码:

$('#damage1').bind("DOMSubtreeModified",function(){displayIcons();});

这段代码的核心需求是:当#damage1元素的子树(包括它自身的内容、子节点)发生任何修改时,调用displayIcons()函数。下面是完全匹配这个需求的现代写法:

完整替换代码

// 先获取目标元素的原生DOM节点(MutationObserver需要原生节点,不是jQuery对象)
const targetElement = $('#damage1')[0];

// 创建MutationObserver实例,指定变化发生时要执行的逻辑
const observer = new MutationObserver(function() {
  // 和你原来的逻辑一致,子树变化时调用displayIcons
  displayIcons();
});

// 配置观察规则,完全对应原来DOMSubtreeModified的触发场景
const observerOptions = {
  subtree: true,          // 监听目标元素的整个子树
  childList: true,        // 监听子节点的添加/删除
  attributes: true,       // 监听元素属性的变化
  characterData: true     // 监听文本内容的变化
};

// 启动观察,开始监听目标元素的变化
observer.observe(targetElement, observerOptions);

逐行帮你理解

  • const targetElement = $('#damage1')[0];:jQuery选择器返回的是封装后的jQuery对象,我们取它的第一个元素(也就是原生的DOM节点),因为MutationObserver只能监听原生DOM元素。
  • new MutationObserver(...):创建一个观察者实例,括号里的函数就是当监听的变化发生时要执行的代码,这里直接复用你原来的displayIcons()就行。
  • observerOptions:这是告诉观察者我们要监听哪些类型的变化,这里的配置完全覆盖了原来DOMSubtreeModified的触发条件——只要目标元素的子树里有任何节点、属性、文本变化,都会触发回调。
  • observer.observe(targetElement, observerOptions):启动观察者,让它开始监控目标元素的变化。

额外小提示(可选)

如果之后你需要停止监听(比如页面关闭、组件销毁时),可以调用下面的代码避免不必要的性能消耗:

observer.disconnect();

内容的提问来源于stack exchange,提问作者Bachir Messaouri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:14:44