サイトの帽子には、ダウンロード可能なファイルのリストがあります。カスタム属性docTypeは、ファイル拡張子に基づいて設定されます。拡張子がない場合、docTypeは "unknownDoc"に設定されます。 CSSファイルには、次のようになります。jQuery.attr()を使用して属性を設定すると、ブラウザは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スタイルを持っていないドキュメントをアップロードすることが十分に可能です。この場合、アイテムにはdocTypeがありますが、背景イメージはありません。このような場合は、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ステートメントを使用する必要がありますか? attrまたはaddClass自体は機能しません。これは、属性を追加しても、ブラウザがaddClassのような新しい属性に基づいてアイテムのスタイルを変更しない場合と同じです。これはjQueryのものかブラウザのものですか?
これを行うより良い方法はありますか?
私はdocTypeカスタム属性ではなくクラスだけを使用しようとしましたが、あまりにも面倒になりました。特に将来、追加のクラスが追加される可能性があります。
すばらしい回答をありがとう。私はコードをそのまま保つつもりです(しかし、誰かが私が好きな提案が出たら、別のやり方で説得することができます)。これを行う理由は、docType属性を使用することのきれいさが本当に好きなのです。さらに、FFやChromeが適切に処理するため、単一の.addClass行が実際にIEの修正版であるようです。だから、1行のIEの修正は大きな問題ではなく、最近では非常に標準的なものです。 –