0

可能重复:
使用 jQuery 获取十六进制值而不是 RGB 值

我有一个<span>这样的:

<span class="colour" style="background:#000000;"></span>

在大多数浏览器中,包括 IE 8,我可以像这样获得背景颜色的十六进制值:

$('span.colour').attr('style').match(/#[0123456789ABCDEF]{3,6}/gi);

但是,在 IE 9 中,$('span.colour').attr('style')返回以下字符串:

background: rgb(0, 0, 0);

我是否必须在 JavaScript 中转换回十六进制,或者有没有办法让 IE 9 直接从元素中给我十六进制值(即实际上在该死的 HTML 中的东西)?

4

2 回答 2

2

您可以使用以下内容对其进行转换(source)。

我相信大多数现代浏览器(包括 chrome)返回 rgb 而不是 hex。

也许您可以进行基本匹配来确定它是十六进制还是 rgb,然后在需要时转换 rgb。

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

Cody O'Dell 发现的更新版本(支持 alpha):

//Function to convert hex format to a rgb color
function rgb2hex(rgb){
 rgb = rgb.match(/^rgba?[\s+]?\([\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?,[\s+]?(\d+)[\s+]?/i);
 return (rgb && rgb.length === 4) ? "#" +
  ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +
  ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +
  ("0" + parseInt(rgb[3],10).toString(16)).slice(-2) : '';
}
于 2012-12-18T16:43:05.060 回答
1

我认为 IE 中没有直接的功能可以为您做到这一点。使用 JS 是将 rgb 值转换为十六进制代码的唯一方法。

这是一个可以将颜色值转换为十六进制的函数

function toHex(color) {
  var body  = createPopup().document.body,
      range = body.createTextRange();
  body.style.color = color;
  var value = range.queryCommandValue("ForeColor");
  value = ((value & 0x0000ff) << 16) | (value & 0x00ff00) | ((value & 0xff0000) >>> 16);
  value = value.toString(16);
  return "#000000".slice(0, 7 - value.length) + value;
};

你可以在这里阅读更多关于它的信息:http: //dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/

于 2012-12-18T16:46:04.007 回答