Вот ответ для людей, которые ненавидят непоследовательность браузера.
Как объяснено, вам нужно проверить, имеет ли этот элемент прозрачный фон, затем, если он есть, пройти через DOM, пока не найдете родителя с установленным background-color
, но это означает тестирование любой строки, которую каждый браузер выберет для возврата.
Firefox, IE и другие возвращают transparent
, браузеры Chrome / safari / webkit и т. Д. Возвращают rgba(0, 0, 0, 0)
... и я лично не верю, что не будет каких-либо других исключений где-либо, сейчас или в будущее.
Если вам не нравится идея доверять строке, данной вам браузером (и вам не следует), вам не нужно: просто проверить background-color
пустого элемента.
Вот пример JSBIN в действии. (чтобы проверить старый IE, удалите «edit» из 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');