使用下面的jQuery将获得元素背景颜色的RGB值:

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

有没有办法得到十六进制值而不是RGB?


当前回答

可读&& Reg-exp自由(无Reg-exp)

我创建了一个函数,它使用可读的基本函数,没有reg-exp。 该函数接受十六进制、rgb或rgba CSS格式的颜色,并返回十六进制表示。 编辑:有一个错误解析出rgba()格式,固定…

function getHexColor( color ){
    //if color is already in hex, just return it...
    if( color.indexOf('#') != -1 ) return color;
    
    //leave only "R,G,B" :
    color = color
                .replace("rgba", "") //must go BEFORE rgb replace
                .replace("rgb", "")
                .replace("(", "")
                .replace(")", "");
    color = color.split(","); // get Array["R","G","B"]
    
    // 0) add leading #
    // 1) add leading zero, so we get 0XY or 0X
    // 2) append leading zero with parsed out int value of R/G/B
    //    converted to HEX string representation
    // 3) slice out 2 last chars (get last 2 chars) => 
    //    => we get XY from 0XY and 0X stays the same
    return  "#"
            + ( '0' + parseInt(color[0], 10).toString(16) ).slice(-2)
            + ( '0' + parseInt(color[1], 10).toString(16) ).slice(-2)
            + ( '0' + parseInt(color[2], 10).toString(16) ).slice(-2);
}

其他回答

改进功能“hex”

function hex(x){
    return isNaN(x) ? "00" : hexDigits[x >> 4] + hexDigits[x & 0xf];
    // or option without hexDigits array
    return (x >> 4).toString(16)+(x & 0xf).toString(16);
}

下面是我发现的一个解决方案,它不会在IE中抛出脚本错误: http://haacked.com/archive/2009/12/29/convert-rgb-to-hex.aspx

大多数浏览器似乎在使用时返回RGB值:

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

只有i.e.(到目前为止只测试了6个)返回十六进制值。

为了避免在i.e.中出现错误消息,你可以将函数包装在if语句中:

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]); 
     }
}

我的精简版

//函数将rgb颜色转换为十六进制格式 函数rgb2hex(rgb) { If (/^#/.test(rgb))返回rgb;// If返回十六进制颜色 设re = /\d+/g; 让十六进制= x = > (x > > 4) .toString (16) + (x & 0 xf) .toString (16); 返回“#”+十六进制(re.exec (rgb)) +十六进制(re.exec (rgb)) +十六进制(re.exec (rgb)); }

Steven Pribilinskiy的答案去掉了前导零,例如#ff0000变成了#ff00。

一种解决方案是在最后两位数字后面附加一个前导0和子字符串。

var rgb = $('#selector').css('backgroundColor').match(/\d+/g);
var hex = '#'+ String('0' + Number(rgb[0]).toString(16)).slice(-2) + String('0' + Number(rgb[1]).toString(16)).slice(-2) + String('0' + Number(rgb[2]).toString(16)).slice(-2);