2

私は最近 (SO.com で) RGB 値を 16 進数に変換する気の利いた小さな関数を見つけました。引数として、CSS の「色」属性の値を渡します (例: 「rgb(45,187,251)」)。関数は次のとおりです。

function rgb2hex(rgb) {
    rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
    function hex(x) {
        return ("0" + parseInt(x).toString(16)).slice(-2);
    }
    return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}

Chrome では問題なく動作しますが、Firefox の Firebug コンソールでは次のエラーが表示されます。

RGBはヌルです

return "#" + hex(rgb 1 ) + hex(rgb[2]) + hex(rgb[3]);

なぜこれが起こるのですか?

goalcandy.comで実際に使用されているのを見ることができます。「今すぐ開始」をクリックし、画面の左側にある「保存」をクリックして、Firebug コンソールを確認します。

4

2 に答える 2

1

rgb2hex()関数ではなく、Firefoxのjqueryのcss()メソッドに問題があることが判明しました。つまり、Firefoxでは、.css( "border-color")を呼び出すと、たとえば.css( "border-top-color")とは対照的に、void値が返されます。Chromeは最初のバージョンも理解します。

于 2012-08-10T19:14:32.957 に答える
1

呼び出しで、Firebug を使用してそのページをトレースする

data += rgb2hex(jqMesh.css('border-color')) + '|'

1516 行目 -- への呼び出しがjqMesh.css('border-color')空の文字列を返しています。

そのブレークポイントで停止しているときに Firebug コンソールを呼び出すjqMesh.css('color')と、「rgb(68, 68, 68)」が返されます。

于 2012-08-10T18:40:13.120 に答える