2017-04-04 8 views
0

すべてのRGBを16進数に変換する必要があります。すべてのRGBをスタイル属性から置換してください

まず、すべての要素をフィルタリングして、style属性を持つ要素を見つけます。 font-family:Arial; background:rgb(255, 0, 0); line-height:10px; color:#fff; border-right-color:rgba(34,64,32,0.5);

どのようにすることができます:任意のRGB色がある場合、私はコールする

function rgbToHex(rgb){ 
    rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 
    if (rgb == null) { 
     return ""; 
    } else { 
     return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]); 
    } 
} 
function hex(x) { 
    var hexDigits = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"); 
    return isNaN(x) ? "00" : hexDigits[(x - x % 16)/16] + hexDigits[x % 16]; 
} 

機能は、スタイルの出力のrgbToHex($(this).css('color'));

例であるHEXに変換するために必要以上

wrapper.find('*[style]').filter(function(){ 
    console.log($(this).attr('style'); 
}); 

新しい値で出力を保存できるようにするには、全体のスタイルをフィルタリングしてRGBのみを取り込み、16進数に変換しますか?

+1

は、なぜあなたはこれをやっていますか?それを元に戻すことはほとんど意味がありません。 – epascarello

+0

私は戻っていない、私はすべてのCSSを取得している、それは後でそれを使用するためにjsonに保存するよりも16進数で置き換えます – Adrian

+0

スタイルを読んで、パターンを一致させるためにreg expを取得し、 – epascarello

答えて

0

私の答え:

wrapper.find('*[style]').filter(function(){ 
    var output = '', 
     thisStyle = $(this).attr('style'), 
     arrayStyle = thisStyle.split(';').filter(function(el) { 
      return el.length != 0 
     }); 
    $.each(arrayStyle, function(i,c){ 
     var replaceRgb = c.replace(/ /g,''); 
     if(c.indexOf('rgb') !== -1) { 
      c = c.split(':'); 
      replaceRgb = c[0]+':'+rgbToHex(c[1].replace(/ /g,'')); 
     } 
     output += replaceRgb+';' 
    }); 
    console.log(output); 
});