Wie erhalte ich den Hintergrundfarbcode eines Elements in hex?

73

Wie erhalte ich den Hintergrundfarbcode eines Elements?

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>

Was ich möchte

#f5b405
Laukok
quelle
1
Was willst du mit dem Wert machen?
Ryan Olds
Ich möchte die Hintergrundfarbe animieren -$(this).animate({ backgroundColor: '#f5b405' }, 'fast');
Laukok
2
Aber ich habe gerade herausgefunden, dass ich den RGB-Code verwenden kann, um auch die Hintergrundfarbe zu animieren! lol
laukok

Antworten:

102

Überprüfen Sie den Beispiellink unten und klicken Sie auf das Div, um den Farbwert in hex zu erhalten.

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>

Überprüfen Sie das Arbeitsbeispiel unter http://jsfiddle.net/DCaQb/

Hussein
quelle
5
Kommt manchmal $(this).css('backgroundColor')zurück rgba(n, n, n, n).
Hippietrail
2
Ich habe ein bisschen mit Ihrer Funktion herumgespielt , um die Designmodernisierung und dergleichen zu automatisieren ... Beispiel für ein Verwendungsszenario jsfiddle.net/DCaQb/625 - nicht perfekt, aber vielleicht hilft es jemandem, also verlinke ich es hier als Referenz
Chris S.
3
Vielen Dank für dieses Codebeispiel. Vielleicht möchten Sie diese Hexc-Funktion einfach als echte Funktion umschreiben, die den String zurückgibt, anstatt eine globale Variable festzulegen.
Johncl
11

Hierfür gibt es einen kleinen Hack, da die HTML5-Zeichenfläche erforderlich ist, um Farbwerte zu analysieren, wenn bestimmte Eigenschaften wie strokeStyleund festgelegt fillStylesind:

var ctx = document.createElement('canvas').getContext('2d');
ctx.strokeStyle = 'rgb(64, 128, 192)';
var hexColor = ctx.strokeStyle;
Nathan Ryan
quelle
Ich glaube, dies ist der beste Ansatz für neue HTML5-Browser :)
AT
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;
  }

Funktioniert ordnungsgemäß unter Chrome und Firefox

coderz
quelle
5

Wenn background-colorunter einem Element keine Definition von vorhanden ist , gibt Chrome dessen background-coloras aus rgba(0, 0, 0, 0), während Firefox dies ausgibt transparent.

coderz
quelle
2

Meine schöne nicht standardmäßige Lösung

HTML

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

jQuery

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

Ergebnis

#f5b405
Newred
quelle
2

Hinzufügen einer @ Newred-Lösung. Wenn Ihr Stil mehr als nur das background-colorhat, können Sie dies verwenden:

$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1]
Radu Diță
quelle
Ich mag diesen Weg
Newred
1

Diese Lösung verwendet einen Teil dessen, was @Newred und @Radu Diță gesagt haben. Funktioniert aber in weniger Standardfällen.

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

Das Problem, das beide haben, ist, dass keiner nach einem Leerzeichen zwischen Hintergrundfarbe und Farbe sucht.

All dies stimmt mit dem obigen Code überein.

 background-color: #ffffff
 background-color:      #fffff;
 background-color:#fffff;
Fall
quelle