2013-06-21 94 views
2

我有以下的DOM元素:jQuery的删除多个变量类

<div id="container"> 
    <ul class="block-grid three-up"> 
     <li>One</li> 
     <li>Two</li> 
     <li>Three</li> 
     <li>Four</li> 
     <li>Five</li> 
     <li>Six</li> 
    </ul> 
</div> 

我想要做的就是针对UL有,指出其利正在上空盘旋一类。到目前为止,我有:

$('#container li').hover(function() { 
     i = $(this).index() + 1; 
     // need function to remove all classes that start with n- here 
     $('#container ul').addClass('n-'+i); 
     $(this).addClass('active'); 
    }, function() { 
     // need function to remove all classes that start with n- here 
     $(this).removeClass('active'); 
    } 
); 

我需要找出一种方式,它以删除开头的所有类正以及因为代码现在写的,它只是增加并添加类的UL认证。我不能简单地删除所有其他类,因为那里有额外的类,我需要用于结构原因。我知道在removeClasses中没有办法使用通配符。有什么我可以在这里使用的正则表达式?

+0

为什么你在第一时间使用'正'类:LED作为?他们是你的元素?你不必使用类为它们编制索引...如果你必须使用for循环,有什么问题? –

+2

您需要重新考虑这一点。你为什么要添加一个递增的数字来开始它,这是没有意义的。 – adeneo

+2

[删除所有以某个字符串开头的类]可能的重复(http://stackoverflow.com/questions/57812/remove-all-classes-that-begin-with-a-certain-string) – Shaddow

回答

5

要回答这个问题,只是为了好玩,这里是一个插件,删除类基于他们开始的东西:

$.fn.removeClassStartsWith = function(param) { 
    return this.each(function() { 
     var classes = this.className.split(/\s+/g), 
      newclasses = []; 

     $.each(classes, function(_,klass) { 
      if ($.trim(klass).indexOf(param) !== 0) 
       newclasses.push($.trim(klass)); 
     }); 

     this.className = newclasses.join(' '); 
    }); 
} 

待cal

$('elements').removeClassStartsWith('n-'); 

FIDDLE

2

我可以不用正则表达式思考的一种方法是将当前类存储在变量中,然后将其删除。

var prev; 
$('#container li').hover(function() { 
    var i = $(this).index() + 1; 
     prev = `n-` + i; 
    $('#container ul').addClass(prev); 
    $(this).addClass('active'); 
}, function() { 
    i = $(this).index() + 1; 
    $(this).removeClass('active'); 
    $('#container ul').removeClass(prev); 
}); 

Check Fiddle

但作为意见认为,这是一个不好的做法,这样做