2012-05-17 186 views
0
if(varName1 <= 1 && varName1 > 0) 
{ 
$('#id1').addClass('ClassName'); 
} 

if(varName2 <= 2 && varName2 > 1) 
{ 
$('#id1').addClass('ClassName'); 
$('#id2').addClass('ClassName'); 
} 


if(varName3 <= 3 && varName2 > 2) 
{ 
$('#id1').addClass('ClassName'); 
$('#id2').addClass('ClassName'); 
$('#id3').addClass('ClassName'); 
} 

所以基本上我想知道是否有更好的方式來做到這一點用較少的if語句(總共8個相同的模式)。如何優化我的if語句或減少if語句?

+3

'varName1'? 'varName2'? 'id3'? 'id1'? 'ClassName'? *** ARGH!*** –

+0

我想你可能在第三個if-clause而不是'varName2'中指定了'varName3'? –

+0

請給出一個嚴肅的例子,而不是這個令人費解和令人困惑的例子。這可能是系統其他部分設計不佳的標誌,而不僅僅是在這裏。 –

回答

3
for (x = 1; x <= 3; x++) { 
    if(varName[x] <= x && varName[x] > (x-1)) { 
     $('#id[x]').addClass('ClassName'); 
    } 
} 
+0

這就是我要找的。 – Rayshawn

+0

您應該注意,這取決於將'varName *'變成數組;你想''#id [x]''應該是'''+ id [x]'或者'#id'+ x'(數字ID,一般來說是個不好的主意),我想呢?如何添加較低的ID?如果varName3也適合,他的代碼將該類添加到#id1和#id2。 –

+1

此代碼的工作原理是因爲我需要所有後續的ID以及類。 – Rayshawn

2

結合您選擇在一個聲明中

if(varName1 <= 1 && varName1 > 0) 
{ 
    $('#id1').addClass('ClassName'); 
} 
if(varName2 <= 2 && varName2 > 1) 
{ 
    $('#id1,#id2').addClass('ClassName'); 
} 
if(varName3 <= 3 && varName2 > 2) 
{ 
    $('#id1,#id2,#id3').addClass('ClassName'); 
} 
+0

它不是* else if else的情況。 '如果'是正確的。 –

+0

@ChrisMorgan:否則,如果已添加更好的代碼可讀性。 – Shyju

+0

但它改變了代碼的含義。 –

0

交替和最好的方式完成的任務是更換您的if-else-如果與switch語句。您可以使用三元也儘管它不會使除了代碼大小會減少很大的區別

開關(VAR){ 案例1: $(「#ID1」)addClass(「類名」); 休息;

case 2: 
    $('#id1,#id2').addClass('ClassName'); 
    break; 

case 3: 
     $('#id1,#id2,#id3').addClass('ClassName'); 
     break; 

default: 
    break; 

}

注意,在開關的情況下,如果你想執行的所有用例的,你應該省略break語句。這裏這段​​代碼將執行特定的用例,當它遇到不匹配的情況時,它會中斷並退出循環。

0
var i = 0, $id; 
while(i <= 3) { 
    if(eval("varName" + i) <= i && eval("varName" + i) > (i - 1)) { 
     $id = $("#id" + i).addClass("className"); 
    } 
} 

//But I recommend something like below (if that is your purpose): 
$("div").each(function(_i, _self) { 
    var $self = $(_self); 
    if($self.hasClass("className")) { 
     $self.addClass("className"); 
    } 
});