Aquí está la respuesta para las personas que odian inconsistencia navegador.
Como se explicó, debe probar si este elemento tiene un fondo transparente, y si lo hace, recorrer el DOM hasta que encuentre un elemento primario con background-color
establecido, pero eso significa probar cualquier cadena que cada navegador elija devolver.
Firefox, IE y otros regresan navegadores transparent
, Chrome/Safari/WebKit etc vuelven rgba(0, 0, 0, 0)
... y yo personalmente no confían en que no habrá alguna otra excepción en alguna parte, ahora o en el futuro.
Si no le gusta la idea de confiar en una cadena proporcionada por un navegador (y no debe), no tiene que: solo probar contra el background-color
de un elemento vacío.
Aquí hay un ejemplo de JSBIN en acción.(Para probar el viejo IE, retire 'Edit' en la URL)
Uso: Plonk este código en algún lugar (que funciona como un plugin de 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);
... entonces se puede obtener el color de fondo 'heredada' de cualquier elemento de la siguiente manera:
var backgroundColor = $('#someelement').bkgcolor();
O si desea una alternativa, que se aplica en lugar de 'transparente' si no se establece background-color
h ere o en cualquier lugar detrás de este elemento (p. para hacer coincidir superposiciones), enviar como un argumento:
var backgroundColor = $('#someelement').bkgcolor('#ffffff');
David, ¡Gracias por tu código! Este es el enfoque que estoy viendo en este momento. Me resulta difícil creer que no hay una forma más directa y confiable de determinar esto, y como señaló otro usuario, no hay garantía de que un elemento esté posicionado encima de su elemento primario. –
Recibí una alerta de "transparente", intento cambiarlo a 'color! == 'transparent'' - luego recibo una alerta de' rgb (255, 0, 0) '- demo actualizada: http: // jsfiddle .net/Mottie/Y4uDL/1/ – Mottie
, pero ¿y si el color de fondo es realmente rgba (0, 0, 0, 0) y el padre es verde? Tu solución no funcionará – Toolkit