J'ai un site qui répertorie un ensemble de fichiers qui peuvent être téléchargés. L'attribut personnalisé docType est défini en fonction de l'extension de fichier. S'il n'y a pas d'extension, le docType est défini sur "unknownDoc". Le fichier CSS ressemble à ceci:Lors de l'utilisation de jQuery.attr() pour définir un attribut, le navigateur ne met pas à jour le style à partir du 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;
}
Il est tout à fait possible qu'un utilisateur télécharge un document que nous n'avons pas de style css mis en place pour encore. Dans ce cas, l'élément aura un docType mais pas d'image de fond. Dans ces cas, je veux que le style unknownDoc soit appliqué. Donc, j'utilise ce qui suit:
$('.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\"]");
}
});
Cela fonctionne très bien. Ce que je ne comprends pas, c'est pourquoi dois-je utiliser l'instruction addClass? L'attr ou addClass par eux-mêmes ne fonctionne pas. C'est comme si l'ajout de l'attribut ne permettait pas au navigateur de re-styler l'élément en fonction du nouvel attribut comme le fait addClass. Est-ce une chose jQuery ou une chose de navigateur?
Y a-t-il une meilleure façon de procéder?
J'ai essayé d'utiliser uniquement des classes plutôt que l'attribut personnalisé docType, mais cela devient trop compliqué, en particulier lorsque des classes supplémentaires peuvent être ajoutées à l'élément dans le futur.
Merci pour les bonnes réponses. Je vais garder le code tel qu'il est (mais je pourrais être persuadé de faire différemment si quelqu'un propose une suggestion que j'aime mieux). Ma raison pour cela est que j'aime vraiment la propreté de l'utilisation de l'attribut docType. De plus, il semble que la seule ligne .addClass est vraiment un correctif pour IE, comme FF et Chrome gérer correctement. Donc, un correctif IE ligne unique n'est pas un gros problème et, de nos jours, est tout à fait standard. –