如何获取元素的背景颜色代码?
HTML
<div style="background-color:#f5b405"></div>
jQuery的
$(this).css("background-color");
结果
rgb(245, 180, 5)
我想要的是
#f5b405
检查下面的示例链接,然后单击div以获取十六进制的颜色值。
var color = '';
$('div').click(function() {
var x = $(this).css('backgroundColor');
hexc(x);
alert(color);
})
function hexc(colorval) {
var parts = colorval.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
delete(parts[0]);
for (var i = 1; i <= 3; ++i) {
parts[i] = parseInt(parts[i]).toString(16);
if (parts[i].length == 1) parts[i] = '0' + parts[i];
}
color = '#' + parts.join('');
}
查看http://jsfiddle.net/DCaQb/的工作示例
这有点破解,因为当设置strokeStyle
和fillStyle
等特定属性时,HTML5画布需要解析颜色值:
var ctx = document.createElement('canvas').getContext('2d');
ctx.strokeStyle = 'rgb(64, 128, 192)';
var hexColor = ctx.strokeStyle;
function getBackgroundColor($dom) {
var bgColor = "";
while ($dom[0].tagName.toLowerCase() != "html") {
bgColor = $dom.css("background-color");
if (bgColor != "rgba(0, 0, 0, 0)" && bgColor != "transparent") {
break;
}
$dom = $dom.parent();
}
return bgColor;
}
在Chrome和Firefox下正常运行
您拥有将其转换为所需格式所需的颜色。
这是一个应该做的技巧:http://www.phpied.com/rgb-color-parser-in-javascript/
事实上,如果在某些元素下没有background-color
的定义,Chrome会将background-color
输出为rgba(0, 0, 0, 0)
,而Firefox输出则为transparent
。
我美丽的非标准解决方案
HTML
<div style="background-color:#f5b405"></div>
jQuery的
$(this).attr("style").replace("background-color:", "");
结果
#f5b405
添加@Newred解决方案。如果你的风格不仅仅是background-color
,你可以使用:
$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1]
该解决方案利用了@Newred和@RaduDiţă所说的部分内容。但是会在不太标准的情况下工作。
$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1].replace(/\s/g, '');
它们都有的问题是既不检查background-color:和color之间的空格。
所有这些都与上面的代码相匹配。
background-color: #ffffff
background-color: #fffff;
background-color:#fffff;