这是讨厌浏览器不一致的人的答案。
如前所述,您需要测试此元素是否具有透明背景,如果存在,则遍历 DOM,直到找到设置了 background-color 的父级 - 但这意味着测试每个浏览器选择返回的任何字符串。
Firefox、IE 和其他浏览器返回 transparent,Chrome/safari/webkit 浏览器等返回 rgba(0, 0, 0, 0)... 我个人不相信现在或将来不会有其他异常未来。
如果您不喜欢信任浏览器提供给您的字符串的想法(而且您不应该这样做),您不必:只需针对空元素的 background-color 进行测试。
这是一个JSBIN 的实际示例。 (要在旧 IE 上测试,请从 URL 中删除“编辑”)
用法:把这段代码放在某个地方(它作为一个 jQuery 插件工作)...
(function($) {
// Get this browser's take on no fill
// Must be appended else Chrome etc return 'initial'
var $temp = $('<div style="background:none;display:none;"/>').appendTo('body');
var transparent = $temp.css('backgroundColor');
$temp.remove();
jQuery.fn.bkgcolor = function( fallback ) {
function test( $elem ) {
if ( $elem.css('backgroundColor') == transparent ) {
return !$elem.is('body') ? test( $elem.parent() ) : fallback || transparent ;
} else {
return $elem.css('backgroundColor');
}
}
return test( $(this) );
};
})(jQuery);
...那么您可以像这样获得任何元素的“继承”背景颜色:
var backgroundColor = $('#someelement').bkgcolor();
或者,如果您希望应用回退而不是“透明”,如果此处或此元素后面的任何位置未设置background-color(例如,用于匹配覆盖),请作为参数发送:
var backgroundColor = $('#someelement').bkgcolor('#ffffff');