2013-12-15 96 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