如何删除以...开头的类?

5 javascript jquery

HTML

<div class="ativo37 and many other classes"></div>
<div class="another classes here with ativo1"></div>
<div class="here ativo9 and more two or three"></div>
Run Code Online (Sandbox Code Playgroud)

JS

$("div[class^='ativo']").on("click", function(){
    $(this).removeClass("^='ativo'"); // How to achieve it?
});
Run Code Online (Sandbox Code Playgroud)

我该怎么做而不是.removeClass("^='ativo'");

的jsfiddle

Mil*_*war 16

.removeClass() 接受一个删除类的函数,并接受索引和旧的CSS值:

一个函数,返回一个或多个要删除的空格分隔的类名.接收集合中元素的索引位置和旧类值作为参数.

您可以删除以所需名称开头的类名,并使用以下内容保留现有名称:

$("div[class*='ativo']").removeClass (function (index, css) {
   return (css.match (/(^|\s)ativo\S+/g) || []).join(' ');
});
Run Code Online (Sandbox Code Playgroud)

工作演示

  • 更新了相关的jsFiddle:http://jsfiddle.net/vq19cnrq/2/应该使用:`$("div [class*='ativo']")` (3认同)

voi*_*oid 15

function removeClassByPrefix(el, prefix) {
    var regx = new RegExp('\\b' + prefix + '.*?\\b', 'g');
    el.className = el.className.replace(regx, '');
    return el;
}
Run Code Online (Sandbox Code Playgroud)

您可以使用此纯Javascript解决方案.

  • 我在使用包含连字符的类时遇到麻烦,如果我尝试在类这样的类上使用它:`class-name`使用"class"作为前缀我仍然以"name"结尾.有没有办法改变正则表达式来解决这个问题? (3认同)
  • @AhmedWagdi 将表达式更改为:`new RegExp('\\b' + prefix + '(.*)?\\b', 'g');` (2认同)

str*_*str 6

没有jQuery,您可以使用classListstartsWith

var el = document.querySelector('div[class^="ativo"]');
el.classList.forEach(className => {
  if (className.startsWith('ativo')) {
    el.classList.remove(className);
  }
});
Run Code Online (Sandbox Code Playgroud)

  • 2019年最佳答案 (3认同)
  • 请注意,此答案会在迭代时从数组中删除元素,因此如果两个匹配类中的后者恰好在元素的 classList 中是连续的,则它将无法删除它们。 (3认同)