使用jQuery从匹配特定格式的元素中删除所有类

时间:2011-03-15 20:06:30

标签: jquery

我之前问了一个类似的问题,但是我的措辞提供了正确提交的答案,但没有提到我实际上想要回答的问题:)为了不弄乱SO的列表,我已经单独发布了这个问题。

鉴于下面的HTML,从#item_3中删除以“child_”开头的所有的最方便方法是什么?

解决方案需要能够保留“stays_put”类,而不会影响任何其他列表元素。

<ul id="list">
  <li id="item_1" class="child_1 child_12">Item 1</li>
  <li id="item_2" class="child_4 child_6">Item 2</li>
  <li id="item_3" class="child_3 child_1 stays_put">Item 3</li>
</ul>

我最初提出的问题可以在这里找到。 Using Reg Ex in jQuery selection

2 个答案:

答案 0 :(得分:3)

好吧,我想你可能会直接搞乱class属性,就像这样:

$('#item_3').attr('class', function() {
    return $.trim($(this).attr('class').replace(/child_\S+/g, ''));
});

基本上,您搜索前缀为child_的类,替换为空,然后使用生成的字符串设置class属性。正则表达式/child_\S+/g匹配child_后跟非空白字符,因为类名是空格分隔的。

jsFiddle preview

答案 1 :(得分:0)

您可以结合使用splitjQuery.each

来执行此操作
var classes = $('#item_3').attr('class').split(' ');
$.each( classes, function( idx, val ) {
   if( val.indexOf('child_') === 0 ) {
      $('#item_3').removeClass( val );
   }
});