如何缩短此JavaScript/jQuery代码

如何缩短此JavaScript/jQuery代码,javascript,jquery,Javascript,Jquery,有没有办法将这个循环四次以缩短它?我试着把课堂从站着改为坐着,然后一次换一个 if(sitting > 0) { $('.standing:first-of-type').removeClass('standing').addClass('sitting'); } else { $('.sitting:first-of-type').removeClass('sitting').addClass('standing'); } if(sitting > 1) {

有没有办法将这个循环四次以缩短它?我试着把课堂从站着改为坐着,然后一次换一个

if(sitting > 0) {
    $('.standing:first-of-type').removeClass('standing').addClass('sitting');
} else {
    $('.sitting:first-of-type').removeClass('sitting').addClass('standing');
}

if(sitting > 1) {
    $('.standing:nth-of-type(2)').removeClass('standing').addClass('sitting');
} else {
    $('.sitting:nth-of-type(2)').removeClass('sitting').addClass('standing');
}

if(sitting > 2) {
    $('.standing:nth-of-type(3)').removeClass('standing').addClass('sitting');
} else {
    $('.sitting:nth-of-type(3)').removeClass('sitting').addClass('standing');
}

if(sitting > 3) {
    $('.standing:nth-of-type(4)').removeClass('standing').addClass('sitting');
} else {
    $('.sitting:nth-of-type(4)').removeClass('sitting').addClass('standing');
}
您可以使用和选择器

:lt(index)
选择匹配集中索引小于
index
的所有元素
:gt(index)
选择匹配集中大于
index
的索引处的所有元素。从jQuery文档

由于类
siting
应添加到具有类
的所有元素中。如果
索引
小于
siting
变量值,则
:lt
选择器可与变量
siting
一起使用,以选择此类元素。然后,可以在jQuery元素集上使用和来分别添加和删除传递的类

$('.standing:lt(' + sitting + ')').removeClass('standing').addClass('sitting');
$('.sitting:gt(' + sitting + ')').removeClass('sitting').addClass('standing');

好吧,你可以用一个丑陋的for循环:

function toggleSitting(sitting){
    var initial = 0;
    var final = 3;
    for(var i = initial; i <= final; i++){
        $('.standing:nth-of-type(' + (i+1) +')')
            .toggleClass('standing', sitting < i)
            .toggleClass('sitting', sitting > i);
    }
}
toggleSitting(sitting);
功能切换坐姿(坐姿){
var初始值=0;
var final=3;
对于(var i=初始值;i i);
}
}
切换坐(坐);

这只是一个草稿,还没有经过测试,但是您尝试做的事情中有一个逻辑。一旦找到了逻辑,就可以在循环中使用它。就像这样:

var condition;
for(var i = 0; i < 4; i++){
    condition = sitting > i;
    $('.standing:nth-of-type(' + (i + 1) + ')').toggleClass('standing', !condition).toggleClass('sitting', condtion);
} 
var条件;
对于(变量i=0;i<4;i++){
条件=坐着>我;
$('.standing:n类型('+(i+1)+')).toggleClass('standing',!condition.).toggleClass('Sitation',condition);
} 

可能是这样的:

var numberOfPlaces = 4;

for(var i=0; i<sitting && i<numberOfPlaces ; i++){
    $('.standing:nth-of-type(' + (i+1) + ')').removeClass('standing').addClass('sitting');
}

for(var i=sitting; i<numberOfPlaces ; i++){
    $('.sitting:nth-of-type(' + (i+1) + ')').removeClass('sitting').addClass('standing');
}
var numberOfPlaces=4;

对于(var i=0;i您是否有HTML和CSS来支持它

您可以使用变量指定类型的“n”:

$('.standing:nth-of-type(' + i + ')')
虽然不确定这是否适用于i=1的情况,但您可能需要这里的第一个类型

如果没有CSS和HTML,就不清楚您想要做什么

您可能还想看看这一点:


当然。使用计数器和
$('.standing:first of type')。每个(函数(idx,elem){})
性能方面,将DOM选择器写入变量(至少是相等的变量)肯定是有意义的如果您的代码正常工作,并且您唯一的问题是希望使其更易于维护,那么您可能应该将此问题发布到。我喜欢2行,聪明!从所讨论的可用代码来看,它似乎是一个整数。我添加了
siting=siting>3?3:siting<0?0:Math.floor(siting);
在代码中,但随后被删除。
$('.standing:nth-of-type(' + i + ')')