我有一个站点帽子列出了一组可以下载的文件。自定义属性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属性的清洁。另外,它看起来像单一的.addClass行真的是一个修复IE,因为FF和Chrome正确处理它。所以,一行一行IE修复几乎不是一个大问题,而且,现在,这是相当标准的。 – 2010-12-03 16:27:42