获得元素的真实背景颜色?

Mar*_*cus 8 html javascript css jquery

目前我想获得指定对象的真实背景颜色,这里,真实意味着人们看到的内容,例如,给出以下代码:

<div id="foo" style="background-color: red">
    I am red
    <span id="bar">
         I have no background, but I am red
    </span>
</div>
Run Code Online (Sandbox Code Playgroud)

span #bar的真正背景颜色应该是rbg(255,0,0).

到目前为止,我做它喜欢这样.但我认为我的解决方案有点愚蠢,或者可能存在缺陷.所以我想知道是否有更好的方法呢?

提前致谢 :)

und*_*ned 7

试试这个:

var get_bgcolor = function(obj) {
    var real = obj.css('background-color');
    var none = 'rgba(0, 0, 0, 0)';
    if (real === none) {
        return obj.parents().filter(function() {
            return $(this).css('background-color') != none
        }).first().css('background-color');
    } else {
        return real
    }
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/bqkwN/


小智 6

尝试

window.getComputedStyle

这种方法简单而本机.但是IE8-不支持.请参阅https://developer.mozilla.org/en/docs/DOM/window.getComputedStyle

  • 在我最简单的 Chrome 情况下,这总是返回 `rgba(0,0,0,0)`。虽然遍历元素树效果很好(见下文)。 (2认同)

Sim*_*son 5

纯JavaScript版本:

function realBackgroundColor(elem) {
    var transparent = 'rgba(0, 0, 0, 0)';
    var transparentIE11 = 'transparent';
    if (!elem) return transparent;

    var bg = getComputedStyle(elem).backgroundColor;
    if (bg === transparent || bg === transparentIE11) {
        return realBackgroundColor(elem.parentElement);
    } else {
        return bg;
    }
}
realBackgroundColor(document.querySelector('#element'));
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/qnLwsr7y/

请注意,它不考虑不透明度或背景图像。