RGB到HEX JavaScript功能在Chrome中运行,但不适用于Firefox或Safari

时间:2012-08-10 18:22:02

标签: javascript

我最近在SO.com上发现了一个漂亮的小函数,它将RGB值转换为十六进制对应符号。作为一个参数,我传递CSS“颜色”属性的值(例如:“rgb(45,187,251)”)。这是功能:

function rgb2hex(rgb) {
    rgb = rgb.match(/^rgb\((\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]);
}

它在Chrome中运行良好,但Firefox中的Firebug控制台出现以下错误:

  

rgb为空

     

返回“#”+ hex(rgb 1)+ hex(rgb [2])+ hex(rgb [3]);

为什么会这样?

您可以在goalcandy.com上看到它正在使用中。只需点击“立即开始”,然后点击屏幕左侧的“保存”并观看Firebug控制台。

2 个答案:

答案 0 :(得分:1)

使用Firebug在该页面上跟踪,在通话中

data += rgb2hex(jqMesh.css('border-color')) + '|'

在第1516行 - 对jqMesh.css('border-color')的调用返回一个空字符串。

在该断点处停止时,在Firebug控制台中调用jqMesh.css('color')将返回“rgb(68,68,68)”

答案 1 :(得分:1)

事实证明 rgb2hex()函数不是问题,而是Firefox中的jquery的 css()方法。也就是说,在Firefox中,调用 .css(“border-color”)会返回一个void值,而不是 .css(“border-top-color”) 。 Chrome也了解第一个版本。