Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:removeClass中的通配符类选择器_Jquery_Selector_Wildcard_Removeclass - Fatal编程技术网

jQuery:removeClass中的通配符类选择器

jQuery:removeClass中的通配符类选择器,jquery,selector,wildcard,removeclass,Jquery,Selector,Wildcard,Removeclass,在添加新类之前,当我直接指定它时(例如,“ratingBlock”、“ratingBlock1”、“ratingBlock2”等),此代码段用于删除现有类。但是,当我在removeClass(“[class^=“ratingBlock”]”中使用通配符选择器时,它不起作用。我做错什么了吗?谢谢 <style type="text/css"> .ratingBlock {background:gold !important;} .ratingBlock1, .ratingBlock2,

在添加新类之前,当我直接指定它时(例如,“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>

.ratingBlock{背景:黄金!重要;}
.ratingBlock1、.ratingBlock2、.ratingBlock3、.ratingBlock4、.ratingBlock5{背景:浅绿色;}
破碎的
// 

我认为您的问题在于引号:我认为您不需要它们,请尝试省略它们

'[class^=ratingBlock]'
编辑:

.removeClass()
接受类名,而不是选择器

但是,您可以指定多个以空格分隔的类名,因此可以尝试以下方法:

.removeClass('ratingBlock ratingBlock1 ratingBlock2'); 

removeClass
采用函数或类名。您正在尝试提供css选择器。看起来您所需要的只是:

ratingBlock.removeClass('ratingBlock').addClass('ratingBlock' + rating)
此外,您还可以删除如下通配符:

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

$。removeClass()
不接受选择器作为参数,只接受一个或多个类名

见:

所以你基本上需要打电话:

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

如果这能让事情变得更简单的话,我会用一个匹配来剥离开始(或结束)的类,所以

ratingBlock.stripClass('ratingBlock-').addClass('ratingBlock-' + rating);
将删除
ratingBlock-1
ratingBlock-2
,但不删除
ratingBlock
(只要包含破折号)


代码:

.removeClass也接受一个函数。当我将第二个通配符解决方案添加到我的代码片段示例中时,它不会从div.test.block中删除现有的类“ratingBlock”,而是继续只添加新类“ratingBlock1”、“ratingBlock2”等。是否有额外的“\”在regex
/\ratingBlock前面…
?看起来我的regex有点混乱(将修复),尽管整体策略有效。这就是我最终要做的,因为它有效。我假设我不必列出所有的课程,但因为只有五门课,而且我的截止日期很短,所以我就这样做了。非常感谢。