2013-04-16 69 views
3

當我直接指定它時(即'ratingBlock','ratingBlock1','ratingBlock2'等),此代碼片段用於在添加新類之前刪除現有類。但是,當我在removeClass('[class^=「ratingBlock」]')中使用通配符選擇器時,它不起作用。難道我做錯了什麼?謝謝。jQuery:removeClass中的通配符類選擇器

<style type="text/css"> 
.ratingBlock {background:gold !important;} 
.ratingBlock1, .ratingBlock2, .ratingBlock3, .ratingBlock4, .ratingBlock5 {background:LightGreen;} 
</style> 

<div class="test block ratingBlock"> 
Broken 
<div><a href="#" class="ratingLink ratingNo-1">1+</a></div> 
<div><a href="#" class="ratingLink ratingNo-2">2+</a></div> 
<div><a href="#" class="ratingLink ratingNo-3">3+</a></div> 
</div> 

<script type="text/javascript"> 
// <![CDATA[ 
jQuery(document).ready(function(){ 
    initRatingWorks(); 
}); 

function initRatingWorks() { 
    jQuery("a.ratingLink").bind('click', function() { 
     var star = jQuery(this); 
     var ratingBlock = star.parents('div.test.block'); 
     var rating = star.attr('class').match(/\d+/); 

     if (ratingBlock.attr('class').indexOf('ratingBlock') !== -1) { 
      ratingBlock.removeClass('[class^="ratingBlock"]').addClass('ratingBlock' + rating); 
     } 
     else { 
      ratingBlock.addClass('ratingBlock' + rating); 
     } 

     return false; 
    }); 
} 
// ]]> 
</script> 
+0

'.removeClass'也接受函數。 – lucuma

回答

5

$.removeClass()並不需要選擇作爲參數,只一個類名(或類名)。

參見:Removing multiple classes (jQuery)

所以你basiacally需要調用:

$.removeClass('ratingBlock1 ratingBlock2 ratingBlock3 ratingBlock4 ratingBlock5'); 
+0

這就是我最終去的,因爲它工作。我假設我不需要列出所有課程,但由於只有五節課,而且我有一個簡短的截止日期,所以我就是這樣做的。謝謝。 – mheppler9d

-1

我認爲你的問題是引號:我不認爲你需要它們,試着省略它們。

'[class^=ratingBlock]' 

編輯:

.removeClass()接受一個類名,而不是一個選擇。

你可以,但是,指定多個空格分隔類名,所以可以試試這個:

.removeClass('ratingBlock ratingBlock1 ratingBlock2'); 

http://api.jquery.com/removeClass/

2

removeClass它可以是一個函數或一個類名。您正在嘗試提供一個css選擇器。它看起來像所有你需要的是:

ratingBlock.removeClass('ratingBlock').addClass('ratingBlock' + rating) 

此外,你可以刪除這樣的通配符:

ratingBlock.removeClass (function (index, css) { 
    return (css.match (/ratingBlock/g) || []).join(' '); 
}); 

參考:JQuery removeClass wildcard

+0

當我將第二個通配符解決方案添加到我的代碼片段示例中時,它不會從div.test.block中移除現有的類'ratingBlock',它會繼續添加新的類'ratingBlock1','ratingBlock2'等等 – mheppler9d

+0

是否有一個額外的「\」在正則表達式的前面\/\ ratingBlock ...'? – drzaus

+0

看起來像我的正則表達式有點搞砸了(將修復),雖然整體策略的作品。 – lucuma