2010-09-20 4 views

ответ

15
var c = $('body').css('background-color'); 
var rgb = c.replace(/^(rgb|rgba)\(/,'').replace(/\)$/,'').replace(/\s/g,'').split(','); 

for(var i in rgb) { 
    console.log(rgb[i]); 
} 

Попробуйте здесь http://jsbin.com/uhawa4

Редактировать:

var c = $('body').css('background-color'); 
var rgb = c.replace(/^rgba?\(|\s+|\)$/g,'').split(','); 

for(var i in rgb) { 
    console.log(rgb[i]); 
} 

или более простой способ, просто целью чисел

var c = 'rgba(60,4,2,6)'; 
var rgb = c.match(/\d+/g); 

for(var i in rgb) { 
    console.log(rgb[i]); 
} 
+0

Спасибо! Это довольно близко к тому, что я искал :) –

+2

Заменить 'var rgb = c.match (/ \ d +/g);' с 'var rgb = c.match (/ [.? \ D] +/g) ; 'для того, чтобы правильно совместить числа с плавающей запятой для альфа в строках rgba, такие как' rgba (60,4,2,0,3) ' –

1

Допустим, вы имеете следующее правило CSS:

#my_element { 
    background-color: rgba(100, 0, 255, 0.5); 
} 

Тогда это, как вы могли бы получить объект RBGA:

var colorStr = $('#my_element').css('backgroundColor'); // "rgba(100, 0, 255, 0.5)" 

// using string methods 
colorStr = colorStr.slice(colorStr.indexOf('(') + 1, colorStr.indexOf(')')); // "100, 0, 255, 0.5" 
var colorArr = colorStr.split(','), 
    i = colorArr.length; 

while (i--) 
{ 
    colorArr[i] = parseInt(colorArr[i], 10); 
} 

var colorObj = { 
    r: colorArr[0], 
    g: colorArr[1], 
    b: colorArr[2], 
    a: colorArr[3] 
} 
0

Как видно here:

R = hexToR("#FFFFFF"); 
G = hexToG("#FFFFFF"); 
B = hexToB("#FFFFFF"); 

function hexToR(h) {return parseInt((cutHex(h)).substring(0,2),16)} 
function hexToG(h) {return parseInt((cutHex(h)).substring(2,4),16)} 
function hexToB(h) {return parseInt((cutHex(h)).substring(4,6),16)} 
function cutHex(h) {return (h.charAt(0)=="#") ? h.substring(1,7):h} 

Этот сценарий в основном принимает каждую пару цветов из вашего кода hexcolor (например, # F0556A) и переключает его в teger с использованием parseInt с базой 16.

+2

Это хорошая форма для архивирования важных частей ссылок в вашем ответе, так что она не теряет большую часть своего значения, если связь замирает. –

2

Вы бы сделать что-то вроде:

$.fn.ToRgb = function() 
{ 
    if(this.charAt(0) == "#"){this = this.substring(1,7);} //remove the # 
    return { 
     R : parseInt(this.substring(0,2) ,16), 
     G : parseInt(this.substring(2,4) ,16), 
     B : parseInt(this.substring(4,6) ,16), 
    } 
} 

RGB = $('#my_element').css('backgroundColor').ToRgb(); 


/* 
    * console.log(rgb) => 
    * { 
    * R: X 
    * G: X 
    * B: X 
    * } 
*/ 

Довольно простой :)

+0

Я вижу, что '$ ('# my_element'). Css ('backgroundColor')' всегда возвращает что-то вроде 'rgb (123, 87, 92)' или 'rgba (123, 87, 92, 0.7)'. Может ли он вернуть также такие вещи, как '# 123456' или' 123456'? –

+0

Этого специально не задавали для – RobertPitt

+0

@Robert - подразумевалось, что вход будет чем-то вроде 'rgba (...)', поскольку простое шестнадцатеричное значение, например '# 6400FF', не может выразить непрозрачность. –

0

Более простой:

//javascript code 
var color = $('#my_element').css('backgroundColor'); 
var rgb = /rgb\((\d+), (\d+), (\d+)\)/.exec(color); 
    var r = rgb[1], 
     g = rgb[2], 
     b = rgb[3]; 
    console.log('Red :' + r); 
    console.log('Green:' + g); 
    console.log('Blue :' + b); 
0

Чтобы преобразовать Rgba строку объекта с ключами:

convertRGBtoOBJ(colorString) 
{ 
    const rgbKeys = ['r', 'g', 'b', 'a']; 
    let rgbObj = {}; 
    let color = colorString.replace(/^rgba?\(|\s+|\)$/g,'').split(','); 

    for (let i in rgbKeys) 
    rgbObj[rgbKeys[i]] = color[i] || 1; 

    return rgbObj; 
} 

console.log(convertRGBtoOBJ('rgba(23,54,230,0.5)')) 

/* 
    Object {r: "23", g: "54", b: "230", a: 0.5} 
*/