How to get hex color value rather than RGB value?

前端 未结 19 3145
猫巷女王i
猫巷女王i 2020-11-21 23:06

Using the following jQuery will get the RGB value of an element\'s background color:

$(\'#selector\').css(\'backgroundColor\');

Is there a

相关标签:
19条回答
  • 2020-11-21 23:14

    Just to add to @Justin's answer above..

    it should be

    var rgb = document.querySelector('#selector').style['background-color'];
    return '#' + rgb.substr(4, rgb.indexOf(')') - 4).split(',').map((color) => String("0" + parseInt(color).toString(16)).slice(-2)).join('');
    

    As the above parse int functions truncates leading zeroes, thus produces incorrect color codes of 5 or 4 letters may be... i.e. for rgb(216, 160, 10) it produces #d8a0a while it should be #d8a00a.

    Thanks

    0 讨论(0)
  • 2020-11-21 23:16

    Here's an ES6 one liner that doesn't use jQuery:

    var rgb = document.querySelector('#selector').style['background-color'];
    return '#' + rgb.substr(4, rgb.indexOf(')') - 4).split(',').map((color) => parseInt(color).toString(16)).join('');
    
    0 讨论(0)
  • 2020-11-21 23:16

    Convert RGB to Hex

    I am using Jasmine protractor and I was getting errors like - Expected [ 'rgba(255, 255, 255, 1)' ] to contain '#fff'. Below function worked fine for me.

    function RGBAToHexA(test:string) {
    let sep = test.toString().indexOf(",") > -1 ? "," : " ";
    const rgba = test.toString().substring(5).split(")")[0].split(sep);
    console.log(rgba)
    let r = (+rgba[0]).toString(16),
      g = (+rgba[1]).toString(16),
      b = (+rgba[2]).toString(16),
      a = Math.round(+rgba[3] * 255).toString(16);
    
        if (r.length == 1)
            r = "0" + r;
        if (g.length == 1)
            g = "0" + g;
        if (b.length == 1)
            b = "0" + b;
        if (a.length == 1)
            a = "0" + a;
    
    return "#" + r + g + b + a;
    

    }

    describe('Check CSS', function() {
     
    it('should check css of login page', async function(){
            browser.waitForAngularEnabled(true);
            browser.actions().mouseMove(element(by.css('.btn-auth, .btn-auth:hover'))).perform(); // mouse hover on button
            csspage.Loc_auth_btn.getCssValue('color').then(function(color){
                console.log(RGBAToHexA(color))
                expect( RGBAToHexA(color)).toContain(cssData.hoverauth.color);
    
            })
    
           
    
    0 讨论(0)
  • 2020-11-21 23:18

    Same answer like @Jim F answer but ES6 syntax , so, less instructions :

    const rgb2hex = (rgb) => {
      if (rgb.search("rgb") === -1) return rgb;
      rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
      const hex = (x) => ("0" + parseInt(x).toString(16)).slice(-2);
      return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
    };
    
    0 讨论(0)
  • 2020-11-21 23:21
    var hexDigits = new Array
            ("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"); 
    
    //Function to convert rgb color to hex format
    function rgb2hex(rgb) {
     rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
     return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
    }
    
    function hex(x) {
      return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
     }
    

    (Source)

    0 讨论(0)
  • 2020-11-21 23:23

    Most browsers seem to return the RGB value when using:

    $('#selector').css('backgroundColor');
    

    Only I.E (only 6 tested so far) returns the Hex value.

    To avoid error messages in I.E, you could wrap the function in an if statement:

    function rgb2hex(rgb) {
         if (  rgb.search("rgb") == -1 ) {
              return rgb;
         } else {
              rgb = rgb.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/);
              function hex(x) {
                   return ("0" + parseInt(x).toString(16)).slice(-2);
              }
              return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); 
         }
    }
    
    0 讨论(0)
提交回复
热议问题