У меня на сайте есть список файлов, которые можно скачать. Пользовательский атрибут docType устанавливается в зависимости от расширения файла. Если расширения нет, для docType устанавливается значение unknownDoc. Файл CSS выглядит примерно так:
.TitleColumn[docType="pdf"]
{
background: url("/images/common/icons/pdf.png") no-repeat left center;
}
.TitleColumn[docType="doc"], TitleColumn[docType="docx"]
{
background: url("/images/common/icons/word.png") no-repeat left center;
}
.TitleColumn[docType="unknownDoc"]
{
background: url("/images/common/icons/unknownDoc.png") no-repeat left center;
}
Вполне возможно, что пользователь загрузит документ, для которого еще не настроен стиль CSS. В этом случае у элемента будет тип документа, но нет фонового изображения. В этих случаях я хочу применить стиль unknownDoc. Поэтому я использую следующее:
$('.TitleColumn').each(function (index) {
var hasNoDocImage = $(this).css("background-image") == "none";
var docType = $(this).attr("docType");
if (hasNoDocImage && docType) {
$(this).attr("docType", "unknownDoc");
$(this).addClass("TitleColumn[docType=\"unknownDoc\"]");
}
});
Это отлично работает. Я не понимаю, почему я должен использовать оператор addClass? Аттр или addClass сами по себе не работают. Как будто добавление атрибута не заставляет браузер изменять стиль элемента на основе нового атрибута, как это делает addClass. Это jQuery или браузер?
Есть ли лучший способ сделать это?
Я пытался использовать только классы, а не пользовательский атрибут docType, но он становится слишком запутанным, особенно когда в будущем к элементу могут быть добавлены дополнительные классы.