我在某些元素上使用mouseenter
和mouseleave
事件来更改其外观。我能这样做使用以下两种策略:动态添加和删除元素样式的最佳方式
$(this).css('someProperty','someValue')
添加,然后$(this).removeAttr('style')
删除$(this).addClass('someClass')
添加,然后$(this).removeClass('someClass')
删除
什么是最好的方式这样做?
我在某些元素上使用mouseenter
和mouseleave
事件来更改其外观。我能这样做使用以下两种策略:动态添加和删除元素样式的最佳方式
$(this).css('someProperty','someValue')
添加,然后$(this).removeAttr('style')
删除$(this).addClass('someClass')
添加,然后$(this).removeClass('someClass')
删除什么是最好的方式这样做?
绝对选项2.样式应该在样式表中定义。
还有toggleClass
,它会删除该类,如果它存在,但在缺失的情况下添加它。
注:toggleClass
也可以让你在布尔通过作为第二个参数,告诉它是否添加或删除它(不管它目前拥有应用该类),所以:
$(this).toggleClass('active', true);
完全等同于:
$(this).addClass('active');
这是非常方便的,当你在你的代码有一个布尔值了。因此,而不是这样的:
if (isUserActive()) {
$(this).addClass('active');
} else {
$(this).addClass('active');
}
你可能只是这样做:
$(this).toggleClass('active', isUserActive());
我强烈推荐addClass()
/removeClass()
,因为你可以添加,删除和更改属性的整体裹以最小的jQuery 。
尽管css()
方法需要你,或者说脚本,来跟踪什么应该被改变,以反映的审美变化率(s)传达程序互动,耦合,与attr()
方法和去除style
属性将删除全部样式,即使那些你想要的元素保留,这就要求你重新分配这些属性。
所以,基本上,选项2是有效的,选项1创建不必要的工作。
当然,总有toggleClass()
,这可以提高效率。
除非您需要动态生成任何CSS属性值,否则您最好将样式与javascript分离。所以使用类而不是直接的CSS样式。
.addClass
和.removeClass
是最好的方式,因为你可以用你的CSS改变你的变化...所以过了一段时间,你可以轻松地重新设计你的网站。
第二个是最好的,因为通常风格将是不同的元素通用,它将通用和添加删除相比,增加属性一个接一个。
$(this).addClass('someClass') to add and then $(this).removeClass('someClass') to remove
如果您在多个元素中调用此函数,我建议您使用第二个元素。如果您以后需要再次更改外观,那么您只能在css类中编辑,而不是在所有元素中编辑。
我认为是这样,但不确定。 – user1032531
同意removeAttr,但http://stackoverflow.com/questions/4036857/jquery-remove-style-added-with-css-function喜欢它 – user1032531
随着mouseenter/mouseleave(或悬停),是toggleClass()适当? – user1032531