使用JQuery removeClass()删除除一个之外的所有类

tal*_*myn 6 javascript jquery jquery-selectors removeclass

好的,我有一个有趣的(好吧,对我来说很有趣,反正:)).

我有一个情况,我有一个静态类值的div,但它也可以分配一个动态的"二级类".当用户进行选择时,需要删除任何现有的辅助类并添加新类.

忽略使用id值(项目的标准使用类......无法更改),是否有一种优雅的方法可以在添加新类之前简单地忽略第一个类并删除其他任何类?

示例启动HTML:

<div class="staticClass dynaClass1" />
Run Code Online (Sandbox Code Playgroud)

示例JS:

function updateClass(newSecondaryClass) {
    $(".staticClass") . . . **** remove any class besides "staticClass" ****
    $(".staticClass").addClass(newSecondaryClass);
}
Run Code Online (Sandbox Code Playgroud)

如果使用函数调用该函数updateClass("dynaClass2");,则生成的HTML应为:

<div class="staticClass dynaClass2" />
Run Code Online (Sandbox Code Playgroud)

我可以想办法,只需删除所有类removeClass();,并在添加新类时添加"staticClass",或者使用attr("class", "staticClass " + newSecondaryClass);,但我想知道是否有办法处理它而不必触摸静态类?

最后,我想这是一个学术问题,比什么都重要...看起来它应该是可行的,但我不知道该怎么做.:d

Kon*_*nev 10

您可以删除所有类并添加要留下的类:

$(".staticClass").removeClass().addClass('staticClass');
Run Code Online (Sandbox Code Playgroud)

removeClass()不带参数调用会删除所有类.

如果您不想这样做,那么您只需修改class属性:

$(".staticClass").attr('class', 'staticClass');
Run Code Online (Sandbox Code Playgroud)

  • 很酷,但这个家伙还是想到了(看看@问题的结尾) (4认同)

Bea*_*rtz 5

您可以传递一个函数来删除类,该函数返回除静态类之外的所有类:

$('.staticClass').removeClass(function(index, klass) { 
  return klass.replace(/(^|\s)+staticClass\s+/, ''); 
})
Run Code Online (Sandbox Code Playgroud)

这将返回对象上的所有类,而不包含静态类,因此将除去静态类之外的所有类。