Проверьте, не задан ли цвет фона? - PullRequest
0 голосов
/ 21 марта 2011

В следующей ситуации:

var bgCol = $(selector).css('backgroundColor');

Я сохраняю backgroundColor html-элементов в переменной.Как я могу запросить, если bgCol не установлен?Различные элементы на моей странице даже не имеют bgColor, поэтому я получаю ошибки.

Если я проверяю на

if ( bgCol != "rgba(0, 0, 0, 0)" )

, все работает нормально.Мне просто интересно, если это правильная вещь, чтобы проверить?Разве это не должно быть что-то вроде != "undefined" или != 0

Я тестирую на "rgba(0, 0, 0, 0)", потому что моя консоль сказала мне ... если я console.log (bgCol) и bgcolor не установленмоя консоль говорит: "rgba(0, 0, 0, 0)"

Мне просто интересно, правильно ли это, что я делаю?

Ответы [ 4 ]

1 голос
/ 04 марта 2013

Хотя зависит от браузера, это не значит, что вам нужно бороться с несоответствиями браузера и пытаться угадать, какие строки вернет каждый браузер (оба сейчас и в будущем ). В настоящее время он прозрачен в IE и Firefox, а rgba (0, 0, 0, 0) в браузерах Webkit, но это может измениться.

Вместо того, чтобы жестко кодировать строки и доверять браузерам, чтобы дать вам то, что вы ожидаете, вы можете найти и проверить точное имя, которое этот браузер посетителя фактически использует для background-color фиктивного элемента с background:none;.

// Get this browser's take on no fill. Append, else Chrome returns 'initial'  
var $temp = $('<div style="background:none;display:none;"/>').appendTo('body');
var transparent = $temp.css('backgroundColor');
$temp.remove();

// Use it
if ( $elem.css('backgroundColor') != transparent ) {
  // It's set
} else {
  // It's blank
}

Даже если какой-нибудь безумный будущий браузер решит использовать имя «Clive» для background-color элементов, для которых не установлен ни один (или, более реалистично, может быть что-то, основанное на схеме, которая лучше работает со всей гаммой sRGB или цветовые профили экрана) это все равно будет работать.

Вот пример JSBIN в контексте ответа на вопрос Как определить унаследованный цвет фона элемента с помощью jQuery / JS?


Имейте в виду, что некоторые браузеры несовместимы с самими собой в зависимости от того, является ли элемент частью тела документа или нет. Итак, убедитесь, что вы сравниваете как с как.

Например, в Chrome:

$('<div/>').css('backgroundColor'); 
// returns '' empty string 

$('<div style="background:none;"/>').css('backgroundColor'); 
// returns 'initial'

$('<div style="background:none;"/>').appendTo('body').css('backgroundColor'); 
// returns 'rgba(0, 0, 0, 0)' 
0 голосов
/ 21 марта 2011

ВСЕГДА установлен цвет фона.Если вы не установите его, браузер устанавливает его по умолчанию.Я думаю, что это вполне правильное предположение, что bg по умолчанию белый, если мы говорим только о теле.

В случае, если вы говорите о других узлах, вы должны попытаться выяснить, является ли фонсвойство -color было получено из прямого правила или если оно было inherited

0 голосов
/ 21 марта 2011

$ (селектор [атрибут]) возвращает набор селекторов, которые совпадают с выбранным селектором И с определенным перечисленным атрибутом.

с помощью этого вы можете перебирать интересующие вас элементы DOMв, проверяя, есть ли у них атрибут "background-color".если это так, отлично, если нет, вы можете установить для их атрибутов цвета фона значение по умолчанию по вашему выбору.

Надеюсь, это полезно.

Andy

0 голосов
/ 21 марта 2011

Это зависит от браузера - я проверю это значение в основных браузерах и выясню, что вы должны проверять. В качестве альтернативы, вы можете проверить в Интернете, обсуждался ли этот вопрос ранее.

EDIT: Я сделал alert( $("<div />").css("background-color") ), и он вернулся "". Поэтому я думаю, что это по умолчанию в моем браузере - Chrome.

...