javascript - 获取计算样式并省略默认值

标签 javascript css

我正在尝试获取元素的当前运行时样式并过滤掉具有默认值的属性。例如,使用这样的标记:

<style>
    .foo { background: red }
    span { font-size:30px }
</style>


<div style="color: blue">
    <span id="bar" class="foo">hello</span>
</div>

我希望结果是:

 background-color: red;
 color: blue;
 font-size: 30px;

我试过 window.getComputedStyle,但它返回了很多东西,我不确定如何过滤掉默认值。任何指针将不胜感激。

最佳答案

就这样吧 我通过添加一个新的虚拟 DOM 元素来做到这一点,以了解任何元素的默认样式。

/**
 * IE does not have `getComputedStyle` 
 */

window.getComputedStyle = window.getComputedStyle || function( element ) {
  return element.currentStyle;
}

/**
 * get computed style for an element, excluding any default styles
 *
 * @param {DOM} element
 * @return {object} difference
 */

function getStylesWithoutDefaults( element ) {

  // creating an empty dummy object to compare with
  var dummy = document.createElement( 'element-' + ( new Date().getTime() ) );
  document.body.appendChild( dummy );

  // getting computed styles for both elements
  var defaultStyles = getComputedStyle( dummy );
  var elementStyles = getComputedStyle( element );

  // calculating the difference
  var diff = {};
  for( var key in elementStyles ) {
    if(elementStyles.hasOwnProperty(key)
          && defaultStyles[ key ] !== elementStyles[ key ] )
    {
      diff[ key ] = elementStyles[ key ];
    }
  }

  // clear dom
  dummy.remove();

  return diff;
}


/**
 * usage
 */

console.log( getStylesWithoutDefaults( document.getElementById( 'bar' ) ) );

注意事项:

  • 结果将有一些额外的属性,而不仅仅是您提到的那些。

demo - console should be opened

关于javascript - 获取计算样式并省略默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22907735/

相关文章:

javascript - 如何向 GLTF 模型添加光泽度/镜面纹理?

html - flexbox 半侧布局,左侧图像固定

Javascript - Apply() 破坏 IE 9

javascript - 将 “Vanilla” Javascript 库加载到 Node.js = 'Unexpected token export'

javascript - 如何在sharepoint列的href中调用javascript

javascript - RegEx 与 MT940 语句中的最后一行不匹配 :86: tag

html - AngularJS,列表增长时如何显示滚动条

Javascript classList 没有按预期工作

html - 鼠标悬停时CSS隐藏div但它正在闪烁

html - Bootstrap 导航栏调整大小