2013-12-15 127 views
1

如果 '元素' 具有透明背景如何判斷jQuery元素的背景是否透明?

$('element').css('background-color') 

返回 '透明' 在某些瀏覽器和 'RGBA(0,0,0,0)' 在其他。

我會期望jQuery有跨瀏覽器的方式告訴我們一個元素是否有透明背景。

我錯過了什麼嗎?

謝謝

+0

試着用'如果($(」元素')。css('background-color')==='transparent'){}'。 – Vucko

+0

@Vucko不會在鍍鉻 – megawac

+2

爲什麼不能兩個? if($('element').css('background-color')==='transparent'|| $('element').css('background-color')==='rgba(0,0 ,0,0)'){}' – Floris

回答

4

rgba(0,0,0,0)與透明相同。最後一位是顏色應該是多少,0 =透明。

function background_color(element) { 
    if (element.css('background-color') === 'rgba(0, 0, 0, 0)'){ 
     return 'transparent'; 
    } 
    return element.css('background-color'); 
} 

background_color($('element')) // will do the trick 
+0

有一點需要記住:像'rgba(255,255,255,0)'這樣的值也是完全透明的。只要最後一個值爲0,前3個值是什麼都沒關係,所以這裏有一些小誤報。 – rescuecreative

1

我不知道這對你來說是有用的,但你可以添加一個custom cssHook,並在那裏做處理。您也可以大概定義,所以你可以修改的.css(background-color)的回報,但我沒有與cssHooks足夠的經驗,知道如何不使其無限遞歸:/

$.cssHooks["nBackgroundColor"] = {//proxy to .css("background-color") called with .css("n-background-color") 
    get: function(elem) { 
     var back = $(elem).css("background-color"); 
     return back === "rgba(0, 0, 0, 0)" ? "transparent" : back; 
    }, 
    set: function(elem, val){ return $(elem).css('background-color', val); } 
}; 

$($("div")[10]).css('n-background-color');//=> transparent 
+0

謝謝你。我不認爲我會在這裏使用它,但很高興知道! – Steve