【发布时间】:2015-11-03 22:51:18
【问题描述】:
我很好奇添加类与向元素添加属性以动态设置它们的样式。
将 CSS 属性应用于满足特定参数的某些元素的约定通常是通过将类应用于该元素来完成的。例如,如果我单击一个按钮,则可以说该按钮处于活动状态 - 我可以选择在单击时对其应用自定义类,如下所示:
$(".button").click(function(){
$(this).addClass("active");
});
CSS 很简单:
.button.active {
transform: scale(1.5);
}
我的方法不同,我很好奇两者之间是否存在明显差异。我将属性应用于元素而不是类,如下所示:
$(".button").click(function(){
$(this).attr("active", true);
});
使用这样的 CSS:
.button[active] {
transform: scale(1.5);
}
我想知道我是否有任何理由不应该这样做,即这是一个不好的约定或其他什么,以及此方法是否存在任何性能差异。主要是好奇,但也想知道使用像 $(".button[active]") 这样的查询是否会比 $(".button .active") 的性能差。
【问题讨论】:
-
为了它的价值:
active不是有效的 HTML 属性。您需要改用data-active。此外,.button .active选择.button的.active子元素,而.button[active]选择具有active属性的.button元素——您需要使用.button [active]。 -
@JamesDonnelly 我明白了!所以我不能随便使用自定义属性名称吗?哦,我的错!我会改正的
-
类是HTML元素的一个属性
-
@Zimmi 不过,它们在 JavaScript 端的访问方式不同。
-
您通常可以避免使用自定义属性名称(每个浏览器都应该可以很好地处理它们),但是 HTML 验证器会对您大喊大叫,因此遵循将
data-放在前面的标准只是一个好习惯的属性。它确保您的任何属性都不会最终导致发生奇怪的事情(即假设您使用“active”属性,并且将来会在 html 规范中添加“active”属性。突然间,您的“active”属性可能会有一些奇怪的副作用。)并让您轻松查看哪些属性是您的自定义属性。
标签: javascript jquery html css