【发布时间】:2010-12-01 22:49:35
【问题描述】:
我有一个站点帽子,列出了一组可以下载的文件。自定义属性 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 样式的文档。在这种情况下,该项目将具有 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 修复几乎不是什么大问题,而且现在已经很标准了。