web-dev-qa-db-ja.com

要素の背景色コードを取得する方法は?

要素の背景色コードを取得するにはどうすればよいですか?

HTML

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

jQuery

$(this).css("background-color");

結果

rgb(245, 180, 5)

私が欲しいもの

#f5b405
66
laukok

以下のリンク例を確認し、divをクリックして、色の値を16進数で取得します。

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/で動作例を確認してください

94
Hussein

strokeStylefillStyleなどの特定のプロパティが設定されている場合、HTML5キャンバスは色の値を解析する必要があるため、これには多少のハッキングがあります。

var ctx = document.createElement('canvas').getContext('2d');
ctx.strokeStyle = 'rgb(64, 128, 192)';
var hexColor = ctx.strokeStyle;
9
Nathan Ryan
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で適切に動作する

8
coderz

実際、何らかの要素の下にbackground-colorの定義がない場合、Chromeはbackground-colorrgba(0, 0, 0, 0)として出力しますが、Firefoxの出力はtransparentです。

5
coderz

必要な形式に変換するために必要な色があります。

トリックを実行するスクリプトを次に示します。 http://www.phpied.com/rgb-color-parser-in-javascript/

5
generalhenry

私の美しい非標準ソリューション

HTML

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

jQuery

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

結果

#f5b405
3
Newred

@Newredソリューションの追加。スタイルにbackground-color以外のものがある場合は、これを使用できます。

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

このソリューションは、@ 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;
1
Case