Comment puis-je obtenir le code de couleur de fond d'un élément?
HTML
<div style="background-color:#f5b405"></div>
jQuery
$(this).css("background-color");
Résultat
rgb(245, 180, 5)
Ce que je veux
#f5b405
Vérifiez le lien exemple ci-dessous et cliquez sur le div pour obtenir la valeur de couleur en hexadécimal.
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('');
}
Consultez l'exemple de travail sur http://jsfiddle.net/DCaQb/
Il y a un peu de hack pour cela, car le canevas HTML5 est nécessaire pour analyser les valeurs de couleur lorsque certaines propriétés comme strokeStyle
et fillStyle
sont définies:
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;
}
fonctionne correctement sous Chrome et Firefox
En fait, s'il n'y a pas de définition de background-color
Sous un élément, Chrome affichera son background-color
Sous la forme rgba(0, 0, 0, 0)
, tandis que Firefox générera est transparent
.
Vous avez la couleur dont vous avez besoin pour la convertir au format souhaité.
Voici un script qui devrait faire l'affaire: http://www.phpied.com/rgb-color-parser-in-javascript/
Ma belle solution non standard
HTML
<div style="background-color:#f5b405"></div>
jQuery
$(this).attr("style").replace("background-color:", "");
Résultat
#f5b405
Ajout de la solution @Newred. Si votre style a plus que le background-color
vous pouvez utiliser ceci:
$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1]
Cette solution utilise une partie de ce que @Newred et @Radu Diță ont dit. Mais fonctionnera dans des cas moins standard.
$(this).attr('style').split(';').filter(item => item.startsWith('background-color'))[0].split(":")[1].replace(/\s/g, '');
Le problème qu'ils ont tous deux est que ni l'un ni l'autre ne vérifie l'espace entre la couleur de fond et la couleur d'arrière-plan.
Tout cela va correspondre au code ci-dessus.
background-color: #ffffff
background-color: #fffff;
background-color:#fffff;