2014-05-12 16 views
8

Mam następujący kod, aby uzyskać kolor tła elementu.Konwertuj wartość koloru RGB na RGBA na 0.75 alpha

var currentColor = $(this).css('background-color'); 

która zwraca coś rgb(123,123,123)

Co ja teraz chce zrobić przekonwertować to do RGBA i pokazać je na 0,75 alfa

Więc wracając coś rgba(123,123,123,0.75)

Jakieś pomysły?

+0

czy za regex? – nicolallias

+0

Każdy powód, dla którego chcesz zmienić go na rgba zamiast używać funkcji jQuerys $ .fadeTo? rgba nie działa w starszych przeglądarkach. Zamiast tego zrobiłbym $ (this) .fadeTo (0, 0.75). – ninja

+0

@ninja Czy możesz przesłać komentarz jako odpowiedź, aby móc go głosować. Jest to lepsze rozwiązanie, jeśli już używasz jQuery. – Anton

Odpowiedz

17

Od jQuery zawsze wydaje się powrót kolor jak rgb(r, g, b) dla elementów, które nie mają alfa, można po prostu użyć:

$(this).css('background-color').replace(')', ', 0.75)').replace('rgb', 'rgba'); 

Wystarczy upewnić się, że kolor tła nie jest już rgba:

var bg = $(this).css('background-color'); 
if(bg.indexOf('a') == -1){ 
    var result = bg.replace(')', ', 0.75)').replace('rgb', 'rgba'); 
} 
+0

uwaga, jeśli 'ten' nie ma ustawionego zestawu tła,' css ('background-color') 'zwróci' undefined'. –

+0

Dodałem test jsperf pokazujący różnicę użycia 'replace' vs' substr', aby to osiągnąć. 'substr' jest wyraźnie zwycięzcą. https://jsperf.com/replace-rbg-with-rgba – ctrlplusb

2

http://regex101.com/r/lT9iM4

var re = /(rgb)\(([0-9]+),\s+([0-9]+),\s+([0-9]+)/; 
var currentColor = $(this).css('background-color'); 
var subst = 'rgba($2,$3,$4,0.75'; 

$(this).css('background-color', currentColor.replace(re, subst)); 

inne rozwiązanie stosując regex. Ale jak wspomniałem Cerbrus, użycie regex do czegoś tak prostego jest przesadą.

+0

'currentColor.replace (re, subst)' zwraca coś takiego jak dla mnie: '" rgb (255, 255, 255) "' – Cerbrus

+0

Naprawiono wyrażenie regularne akceptować spacje w rgb –

+0

'currentColor.replace (re, subst)' -> '" rgba (rgb, 255,255,0.75) "'. Regeksy są po prostu przesadne, jeśli chodzi o coś tak prostego, jak te 2 zamienniki. – Cerbrus

0

Innym regex spróbować http://jsfiddle.net/hc3BA/

var colour = 'rgb(123,123,123)', 
new_col = colour.replace(/rgb/i, "rgba"); 
new_col = new_col.replace(/\)/i,',0.75)'); 
+0

wyrównywania są przesadne, jeśli wszystko co robisz, to dopasowywanie 1 dokładnego ciągu. – Cerbrus

+2

Sugestia, dowód koncepcji, zachęcamy do zmiany kodu. – nicolallias

Powiązane problemy