3

このコード スニペットは、新しいクラスを追加する前に既存のクラスを削除するように機能します (つまり、「ratingBlock」、「ratingBlock1」、「ratingBlock2」など)。しかし、removeClass ('[class^="ratingBlock"]') でワイルドカード セレクターを使用すると、機能しません。私は何か間違ったことをしていますか?ありがとう。

<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>
4

4 に答える 4

1

それが簡単になる場合は、一致で始まる(または終わる)クラスを削除する別の回答のプラグインを作成したので、

ratingBlock.stripClass('ratingBlock-').addClass('ratingBlock-' + rating);

ratingBlock-1andは削除されますが、削除されratingBlock-2ませんratingBlock(ダッシュが含まれている限り)。

コード: https://gist.github.com/zaus/6734731

于 2013-09-27T20:38:41.817 に答える
-1

問題は引用符だと思います。引用符は必要ないと思います。省略してみてください。

'[class^=ratingBlock]'

編集:

.removeClass()セレクターではなく、クラス名を受け入れます。

ただし、スペースで区切られた複数のクラス名を指定できるため、次のようにしてみてください。

.removeClass('ratingBlock ratingBlock1 ratingBlock2'); 

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

于 2013-04-16T14:27:55.500 に答える