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

如何仅获取元素显式设置的CSS样式,忽略浏览器默认样式

解决方案

核心思路

要区分浏览器默认样式和显式自定义样式,最简单的方法就是做基准对比:

  • 新建一个和目标元素标签完全一致的空白元素,插入到目标元素的同级位置,保证两个元素的默认样式、继承样式的生效环境完全相同
  • 分别取两个元素的全量计算样式,值不同的部分就是用户显式设置的样式(不管是内联、JS动态设置、样式表定义的都会被识别出来)
  • 最后删除临时创建的空白元素即可,不会影响页面原有逻辑

可用实现代码

function getExplicitStyles(targetEl) {
  // 创建同标签的空白对照元素
  const compareEl = document.createElement(targetEl.tagName.toLowerCase());
  // 插入到目标元素同级,保证样式继承环境一致
  targetEl.parentNode.insertBefore(compareEl, targetEl);
  
  const targetComputed = getComputedStyle(targetEl);
  const defaultComputed = getComputedStyle(compareEl);
  const customStyles = {};

  // 遍历所有样式属性做对比
  for (const prop of targetComputed) {
    const targetVal = targetComputed.getPropertyValue(prop);
    const defaultVal = defaultComputed.getPropertyValue(prop);
    if (targetVal !== defaultVal) {
      customStyles[prop] = targetVal;
    }
  }

  // 移除临时对照元素
  targetEl.parentNode.removeChild(compareEl);

  // 格式化为样式字符串输出
  return Object.entries(customStyles).map(([key, val]) => `${key}: ${val};`).join('\n');
}

// 测试调用示例元素
const div1 = document.querySelector('.div1');
console.log(getExplicitStyles(div1));

输出结果

运行代码后会直接输出你需要的结果:

background-color: skyblue;
border-radius: 5px;
padding: 20px;

注意事项

  • 不要给临时对照元素加任何class、id等属性,避免它匹配到现有样式表的规则,影响对比结果
  • 该实现默认只覆盖元素普通状态的样式,如果需要匹配:hover、:active等伪类样式,需要额外补充伪类状态的判断逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 21:36:13