Javascript 将类添加到匹配元素中,而不添加其他特定类

Javascript 将类添加到匹配元素中,而不添加其他特定类,javascript,jquery,css,dom-manipulation,Javascript,Jquery,Css,Dom Manipulation,每当用户单击主体时,我都希望向某个元素添加一个类,只要该元素没有特定的类。问题是,我重复使用这个元素,其中一些元素将具有我提到的特定类,而其他元素则不会。如果一个元素有这个类,在我当前的代码中,任何元素都不会添加新的类 例如: $'body'。单击,函数{ 如果$'.box'.hasClass'red'和&!$'.box'.hasClass'stay-red'{ $'.box'.addClass'blue'; } }; html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:

每当用户单击主体时,我都希望向某个元素添加一个类,只要该元素没有特定的类。问题是,我重复使用这个元素,其中一些元素将具有我提到的特定类,而其他元素则不会。如果一个元素有这个类,在我当前的代码中,任何元素都不会添加新的类

例如:

$'body'。单击,函数{ 如果$'.box'.hasClass'red'和&!$'.box'.hasClass'stay-red'{ $'.box'.addClass'blue'; } }; html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:20px; 宽度:20px; 边缘底部:10px; } 瑞德先生{ 背景:红色; } 蓝先生{ 背景:蓝色; } 这就是你想要的吗

:非选择器

这就是你想要的吗

:非选择器


使用过滤器将更容易,并将避免您的问题:

$'body'。单击,函数{ $'.box'.filter'.red:不.保持红色'.addClass'blue'; }; html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:20px; 宽度:20px; 边缘底部:10px; } 瑞德先生{ 背景:红色; } 蓝先生{ 背景:蓝色; }
使用过滤器将更容易,并将避免您的问题:

$'body'。单击,函数{ $'.box'.filter'.red:不.保持红色'.addClass'blue'; }; html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:20px; 宽度:20px; 边缘底部:10px; } 瑞德先生{ 背景:红色; } 蓝先生{ 背景:蓝色; } 您可以使用:

$('body').on('click', function(){ 
    $('.box.red:not(.stay-red)').addClass('blue');
});
或使用以下各项循环浏览所有内容:

$('body').on('click', function(){

    $('.box').each(function() {
        if ($(this).hasClass('red') && !$(this).hasClass('stay-red')) {
            $(this).addClass('blue');
        }
    });

});
您可以使用:

$('body').on('click', function(){ 
    $('.box.red:not(.stay-red)').addClass('blue');
});
或使用以下各项循环浏览所有内容:

$('body').on('click', function(){

    $('.box').each(function() {
        if ($(this).hasClass('red') && !$(this).hasClass('stay-red')) {
            $(this).addClass('blue');
        }
    });

});
$function{ $'body'。单击,函数{ $'.box'.eachfunction{ 如果$this.hasClass'red'&&!$this.hasClass'stay-red'{ $this.addClass'blue'; } } }; } html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:20px; 宽度:20px; 边缘底部:10px; } 瑞德先生{ 背景:红色; } 蓝先生{ 背景:蓝色; } $function{ $'body'。单击,函数{ $'.box'.eachfunction{ 如果$this.hasClass'red'&&!$this.hasClass'stay-red'{ $this.addClass'blue'; } } }; } html,正文{ 背景:浅蓝色; 身高:100%; } .盒子{ 高度:20px; 宽度:20px; 边缘底部:10px; } 瑞德先生{ 背景:红色; } 蓝先生{ 背景:蓝色; }
如果要避免将新类添加到所有元素(如果其中一个元素具有另一个类),可以使用或:


如果要避免将新类添加到所有元素(如果其中一个元素具有另一个类),可以使用或:


这是您需要的body onclick:

$('body').on('click', function(){
     $('.box.red:not(.stay-red)').removeClass('red').addClass('blue');
});

您还需要删除class.red,即使在这种情况下它仍然有效,因为class.blue是在CSS中的class.red之后定义的

$('body').on('click', function(){
     $('.box.red:not(.stay-red)').removeClass('red').addClass('blue');
});

您还需要删除该类。红色,即使在这种情况下,它也可以工作,因为类.blue是在CSS中的class.red之后定义的

使用.each方法作为$'.box'返回数组而不是单个元素假设它值得删除.blue上的.red类,但是如果除了基于类的选择之外,您没有做太多DOM操作,那么请使用中给出的直接CSS选择器/过滤器下面的答案使用.each method as$'.box'返回数组而不是单个元素假设它值得删除.blue上的.red类,但是如果您除了基于类的选择之外没有做太多DOM操作,那么请使用下面的答案中给出的直接css选择器/过滤器。您的意思是$'.red:不是.stay-red'缺少一部分,红色类。红色:不是…然后是$。红色:不是。保持红色“你的意思是$”。红色:不是。保持红色“缺少一部分,红色类。盒子。红色:不是…然后是$'。盒子。红色:不是。保持红色'