2010-05-06 76 views
2

您好我有一个会沿此线的东西的声明删除所有匹配类中的jQuery

<li class="module ui-helper-fix"> 

而且我可以动态地加入对类改变模块的颜色的li元素(这被动态地通过DB的呼叫提供的)的最终结果是

<li class="module ui-helper-fix module-green"> 

<li class="module ui-helper-fix module-default"> 

嗯,我很好地通过添加一个新的模块 - WHATEVER类来改变颜色,但我想要做的是删除任何匹配模块-XXXX的类,因此它以一个干净的石板开始,然后添加在类模块 - 深红色。

那么如何删除所有匹配module-xxx的类呢?请记住,我不想删除基本模块类。

编辑:

基本上,我需要的任何模块 - 类做了一网打尽的方法:

执行前

<li class="module ui-helper-fix module-default"> 

清洁后扫

<li class="module ui-helper-fix"> 

然后添加分类和最终结果

<li class="module ui-helper-fix module-green"> 

谢谢。

-Seth

+0

请注意我做了什么来使您的示例可见 – 2010-05-06 18:34:11

回答

6

修订

DEMO:http://jsbin.com/onoxa/7

DEMO 2:http://jsbin.com/onoxa/8

$(function() { 
    $("li").each(function(e) {  
    var classes = this.className.replace(/module-\w+/gi, ''); 
     $(this).attr('class', classes); 
    }); 
});​ 

$("li").each(function(e) { 
    var classes = this.className.replace(/module-\w+/gi, ''); 
    $(this).attr('class', classes + ' module-green'); 

}); 

输出中的:

<li class="module ui-helper-fix"> 
+0

这很接近,但我想要做的事情基本上每次我尝试添加一个新的颜色类(模块绿色,模块默认等)我做了一个对任何匹配的“模块”类清除元素类。 – 2010-05-06 18:52:02

+0

所以你basicaly想要删除所有的模块-XXX,只留下模块!对!? – 2010-05-06 18:55:14

+0

是的,如果你看到我上面的编辑,现在可能会更清楚。 – 2010-05-06 18:57:16

1

使用此:

var newClass = "module-green"; 
$("li").attr("class","module ui-helper-fix").addClass(newClass); 
+0

这在技术上是可行的,但是在某些情况下,它不仅仅是模块和ui-helper-fix包含在班级列表中。但是尽管如此+1 – 2010-05-06 19:35:33

0
function changeModule(selector, module_name) { 
    var that = selector; 
    var classes = $(selector).attr('class').split(' '); 
    $.each(classes, function(index, thisClass){ 
     if (thisClass.indexOf('module-') !== -1) { 
      $(that).removeClass(classes[index]) 
     } 
    }); 
    $(that).addClass(module_name); 
} 

jQuery(document).ready(function(){ 
    $('li').click(function(){ 
     changeModule(this, 'module-green'); 
    }) 
});