Get the computed style and omit defaults

前端 未结 6 886
旧巷少年郎
旧巷少年郎 2020-12-28 19:57

I\'m trying to get the current runtime style of an element and filter out properties that have default values. For example, with markup like this:



        
6条回答
  •  梦谈多话
    2020-12-28 20:45

    there you go, i did this by adding a new dummy DOM element, to know which styles are default for any element.

    /**
     * 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' ) ) );
    

    Notes:

    • the result will have some extra properties, not only those you've mentioned.

    demo - console should be opened

提交回复
热议问题