如何缩短此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 + ')')