2012-10-28 120 views
2

我在某些元素上使用mouseentermouseleave事件来更改其外观。我能这样做使用以下两种策略:动态添加和删除元素样式的最佳方式

  1. $(this).css('someProperty','someValue')添加,然后$(this).removeAttr('style')删除
  2. $(this).addClass('someClass')添加,然后$(this).removeClass('someClass')删除

什么是最好的方式这样做?

回答

5

绝对选项2.样式应该在样式表中定义。

还有toggleClass,它会删除该类,如果它存在,但在缺失的情况下添加它。


注:toggleClass也可以让你在布尔通过作为第二个参数,告诉它是否添加或删除它(不管它目前拥有应用该类),所以:

$(this).toggleClass('active', true); 

完全等同于:

$(this).addClass('active'); 

这是非常方便的,当你在你的代码有一个布尔值了。因此,而不是这样的:

if (isUserActive()) { 
    $(this).addClass('active'); 
} else { 
    $(this).addClass('active'); 
} 

你可能只是这样做:

$(this).toggleClass('active', isUserActive()); 
+0

我认为是这样,但不确定。 – user1032531

+0

同意removeAttr,但http://stackoverflow.com/questions/4036857/jquery-remove-style-added-with-css-function喜欢它 – user1032531

+0

随着mouseenter/mouseleave(或悬停),是toggleClass()适当? – user1032531

0

我强烈推荐addClass()/removeClass(),因为你可以添加,删除和更改属性的整体裹以最小的jQuery 。

尽管css()方法需要你,或者说脚本,来跟踪什么应该被改变,以反映的审美变化率(s)传达程序互动,耦合,与attr()方法和去除style属性将删除全部样式,即使那些你想要的元素保留,这就要求你重新分配这些属性。

所以,基本上,选项2是有效的,选项1创建不必要的工作。

当然,总有toggleClass(),这可以提高效率。

0

除非您需要动态生成任何CSS属性值,否则您最好将样式与javascript分离。所以使用类而不是直接的CSS样式。

0

.addClass.removeClass是最好的方式,因为你可以用你的CSS改变你的变化...所以过了一段时间,你可以轻松地重新设计你的网站。

1

选项2如果您必须在JavaScript中执行此操作,但对于现代浏览器,您可能能够使用:hover伪类在CSS中完全实现。

+0

关于CSS的好处 – user1032531

0

第二个是最好的,因为通常风格将是不同的元素通用,它将通用和添加删除相比,增加属性一个接一个。

$(this).addClass('someClass') to add and then $(this).removeClass('someClass') to remove 
0

如果您在多个元素中调用此函数,我建议您使用第二个元素。如果您以后需要再次更改外观,那么您只能在css类中编辑,而不是在所有元素中编辑。

相关问题