jQuery删除类(如果存在)并添加新类

15

我正在尝试使用jQuery从元素中删除一个类(事先不知道它是否存在),并添加一个新的元素来替换它。

这是最好的方式吗?(我有怀疑,因为它在删除之前没有检查类是否存在):

$(elem).removeClass(oldClass).addClass(newClass);

谢谢


1
你需要在删除之前知道它是否有旧类吗?无论存在与否,.removeClass() 都会成功。换句话说,如果存在,则被删除;如果不存在,则被跳过。 - John Strickler
3个回答

32
$(elem).removeClass(oldClass).addClass(newClass);

非常完美。不需要先检查;如果它在那里,它就会被执行,如果没有,则已经消失了。

顺便说一下,您还可以使用toggleClass(),根据是否已存在,添加/删除一个类。


请记住,您也可以使用removeClass()一次列出它们以空格分隔的方式删除多个类,例如$(this).removeClass('one two'); - Surreal Dreams
只是好奇,为什么在JQuery文档中没有说明这一点(或者有吗?)。我想知道如果类不存在它不会抛出错误的原因。谢谢。 - bba
1
我亲自再次检查了一遍,看看他们是否发布了最佳实践 - 没有成功。 实际上,有人在文档页面上问了同样的问题。 我可以告诉你,从我的经验来看,这不会造成问题,在某些方面,这个特定的函数确实做到了你要求的事情 - 它返回被包装的集合,减去你要求删除的类。 如果那些类一开始就不存在,你仍然得到你要求的东西。 - Surreal Dreams
我认为Sarfraz的答案更好,因为它不会不必要地删除和添加类。通常这不是个问题,但如果你使用CSS 3转换,可能会出现一些意外的结果。 - Patrick Klug
请注意,根据类包含的CSS,此方法可能会强制重新绘制。 - Druska
如果其中任何一个存在,删除多个类是否同样有效? - Liutong Chen

10
你可以使用 hasClass 方法来实现:
if ($(elem).hasClass(oldClass)){
   // it has class
} else {
   // it doesn't have specified class
}

描述:确定是否有任何匹配元素被分配了给定的类。

4
toggleClass 

它所做的正是你所期望的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接