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

检测HTML标签样式变更并获取对应变更值的方法

检测HTML标签样式变更并提取详情

MutationObserver本身不会直接提供单个样式属性的变更细节,但可以通过对比变更前后的style属性值来提取具体的变更内容,步骤如下:

1. 配置MutationObserver获取旧值

要对比样式变化,必须在observe配置中开启attributeOldValue: true,这样才能拿到变更前的style属性值:

var variables_observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    // 这里处理变更逻辑
  });
});

var target = document.documentElement;
variables_observer.observe(target, {
  attributes: true,
  attributeFilter: ['style'],
  attributeOldValue: true // 关键:开启后才能获取变更前的style值
});

2. 解析样式字符串为键值对

写一个工具函数,把style的字符串格式转换成对象,方便对比:

function parseStyle(styleStr) {
  const styleObj = {};
  if (!styleStr) return styleObj;
  // 拆分每个样式属性
  styleStr.split(';').forEach(item => {
    const [key, value] = item.trim().split(':');
    if (key && value) {
      styleObj[key.trim()] = value.trim();
    }
  });
  return styleObj;
}

3. 对比新旧样式,提取变更详情

在回调函数中,解析新旧style对象,找出新增或修改的属性:

var variables_observer = new MutationObserver(function(mutations) {
  mutations.forEach(function(mutation) {
    const oldStyle = parseStyle(mutation.oldValue);
    const newStyle = parseStyle(mutation.target.style.cssText);

    // 遍历新样式,对比旧样式找出变更
    for (const prop in newStyle) {
      // 新增属性 或 属性值被修改
      if (!oldStyle.hasOwnProperty(prop) || oldStyle[prop] !== newStyle[prop]) {
        console.log(prop); // 变更的样式属性(比如--size1)
        console.log(newStyle[prop]); // 变更后的属性值(比如100px)
      }
    }
  });
});

// 工具函数
function parseStyle(styleStr) {
  const styleObj = {};
  if (!styleStr) return styleObj;
  styleStr.split(';').forEach(item => {
    const [key, value] = item.trim().split(':');
    if (key && value) {
      styleObj[key.trim()] = value.trim();
    }
  });
  return styleObj;
}

var target = document.documentElement;
variables_observer.observe(target, {
  attributes: true,
  attributeFilter: ['style'],
  attributeOldValue: true
});

效果验证

以你给出的例子为例:

  • 变更前:<html>
  • 变更后:<html style="--size1:100px">

控制台会输出:

--size1
100px

如果是修改已有属性(比如把--size1从100px改成200px),同样会输出修改后的属性和值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 15:50:10