这是讨厌浏览器不一致的人的答案。
如前所述,您需要测试此元素是否具有透明背景,如果有,则遍历 DOM 直到找到具有background-color
set的父元素- 但这意味着测试每个浏览器选择返回的任何字符串。
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
在此处或此元素后面的任何位置设置no 时应用回退而不是“透明” (例如,用于匹配叠加层),请作为参数发送:
var backgroundColor = $('#someelement').bkgcolor('#ffffff');