我最近在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控制台。
答案 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也了解第一个版本。