通过jquery添加类,但仅在不存在时添加

Mar*_*nry 42 jquery list

我想在ul-list中添加一个类(class ="bbox"),但前提是不存在类.这就是我到目前为止所拥有的.如果ul-tag中存在类,如何检查jquery?

$("ul").addClass("bbox");
Run Code Online (Sandbox Code Playgroud)

Mat*_*ury 39

如果要检查特定类是否存在,则:

 if(!$("ul").hasClass("class-name")){
    $("ul").addClass("bbox");
 }
Run Code Online (Sandbox Code Playgroud)

如果要检查是否存在任何类:

if ($('ul').attr('class') == '') {
    $("ul").addClass("bbox");
}
Run Code Online (Sandbox Code Playgroud)

  • 关于特定类的事情,截至目前jQuery已经在使用addClass添加它之前检查了类 (4认同)
  • `hasClass()`已经返回true或false,因此检查是否等于false是多余的.`if(!$('ul').hasClass('classname'))`就足够了 (2认同)

Tor*_*ene 29

只是用$('.selector').addClass("myClass");.

jQuery add/remove类函数在内部检查重复项,这意味着addClass只调用两次会将类添加一次.

  • 来自jQuery文档:https://api.jquery.com/addclass/重要的是要注意,此方法不替换类.它只是添加类,将其附加到可能已经分配给元素的任何类. (5认同)
  • @ vanduc1102如果您的意思是jQuery将复制类,那么您会误解了文档。该语句意味着它不会替换所有的`class`属性值。jQuery确实检查是否存在重复性,因此SO中的许多QA已经对此进行了介绍。 (2认同)

aem*_*nge 17

karim79你几乎得到了它!

让我纠正你

$("ul:not([class*='bbox'])").addClass("bbox");
Run Code Online (Sandbox Code Playgroud)

您将标记与绝对无类匹配,如果ul具有其他类,则不会进行匹配.你必须搜索你想要添加的确切类.喜欢.hasClass aproach.

希望能帮助到你

  • 如果我没弄错,你忘了属性选择器周围的括号.另外,`$("ul:not([class~ ='bbox'])").addClass("bbox");`会更好(代字号). (2认同)

Vis*_*air 12

我想知道这样可以正常工作 - >

$("ul").removeClass("bbox").addClass("bbox");

首先,它将删除,如果有任何,然后添加新的.对我来说工作得最好,因为我懒得输入所有那些if东西.


Dan*_*ial 5

如果我在两个类之间切换,我会使用此方法

if (foo)
    $('button.btn-foo').removeClass('foo bar').addClass('foo');
if (bar)
    $('button.btn-foo').removeClass('foo bar').addClass('bar');
Run Code Online (Sandbox Code Playgroud)

所以我不必检查按钮的当前设置