如何以十六进制获取元素的背景色代码?

75

我如何获取元素的背景颜色代码?

console.log($(".div").css("background-color"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="div" style="background-color: #f5b405"></div>

我想要什么

#f5b405

1
你想用这个值做什么? - Ryan Olds
我想要给背景颜色添加动画效果 - $(this).animate({ backgroundColor: '#f5b405' }, 'fast'); - Run
2
但是我刚刚发现我也可以使用RGB代码来动画背景颜色!哈哈 - Run
8个回答

105

请查看下面的示例链接,并单击div以获取十六进制颜色值。

var color = '';
$('div').click(function() {
  var x = $(this).css('backgroundColor');
  hexc(x);
  console.log(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('');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class='div' style='background-color: #f5b405'>Click me!</div>

请在http://jsfiddle.net/DCaQb/查看工作示例。


5
有时候 $(this).css('backgroundColor') 返回的是 rgba(n, n, n, n) - hippietrail
2
玩了一下你的函数来实现设计现代化自动化等等...... 例如使用场景 http://jsfiddle.net/DCaQb/625/ - 不完美,但或许可以帮到某些人,所以在这里提供链接作为参考。 - Chris S.
3
谢谢这个代码示例。您可能想将hexc函数重写为一个实际的函数,该函数返回字符串,而不是设置一个全局变量。 - Johncl

11

有一种方法可以解决这个问题,因为在设置某些属性(如strokeStylefillStyle)时需要使用HTML5画布来解析颜色值:

var ctx = document.createElement('canvas').getContext('2d');
ctx.strokeStyle = 'rgb(64, 128, 192)';
var hexColor = ctx.strokeStyle;

我相信这是新的HTML5浏览器的最佳方法 :) - A.T.

9
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下。

5

5

实际上,如果某个元素下没有定义background-color,Chrome会将其输出为rgba(0, 0, 0, 0),而Firefox则输出transparent


4

我美丽的非标准解决方案

HTML

<div style="background-color:#f5b405"></div>

jQuery

$(this).attr("style").replace("background-color:", "");

结果

#f5b405

2

在@Newred的解决方案上补充一下。 如果您的样式不仅仅是background-color,您可以使用以下代码:

$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1]

我喜欢这种方式。 - Newred

1
这个解决方案利用了@Newred和@Radu Diță提到的部分内容,但适用于非标准情况。
 $(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1].replace(/\s/g, '');

他们两个的问题都在于没有检查background-color:和颜色之间是否有空格。
所有这些都与上述代码匹配。
 background-color: #ffffff
 background-color:      #fffff;
 background-color:#fffff;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接