2012-10-11 128 views
1

如果在JavaScript中使用shorthands,多種語法的語法是什麼?if語句的多個shorthands?

$('#field-'+i+' .name').css({ 
    top: '30%', 
    width: '100%', 
    'letter-spacing': i==1 ? '-2.5px' : '-1px', 
}); 

我想字母間距有多個簡寫,如:

'letter-spacing': i==1 ? '-2.5px' i==3 ? '-1.5px' : '-1px' 
+4

那不是速記這就是神祕。 – MalSu

+1

你爲什麼不在CSS中設置這些東西? – ahren

+0

@ahren:CSS僅限於一個值。 –

回答

1
i === 1 ? '-2.5px' : i === 3 ? '-1.5px' : '-1px' 
+0

謝謝,這是最短的一個。 =)) –

1

你只是缺少一個:完成了你的第一個條件:

我添加了一些括號,以幫助一點點:

'letter-spacing': (i == 1) ? '2.5px' : ((i == 3) ? '-1.5px' : '-1px')

1

它看起來像你在談論嵌套三元表達 - 我傾向於縮進如下所示:

'letter-spacing': i==1 
    ? '-2.5px' 
    : i==3 
     ? '-1.5px' 
     : '-1px' 
+0

把它作爲表格放在一起通常更具可讀性 –

+0

你是什麼意思?你能舉一個例子嗎? –

+0

我不知道我是否可以作爲評論,我會爲此問題添加_another_回答 –

2

其實,有什麼不對或不好的內聯多ternery運營商,如果你想擁有它在一行代碼中,但你可以在那裏使用更可讀的風格。

但是,我的建議是使用查找對象或數組,尤其是如果你有很多不同的狀態。

var values = ['1px', '-2.5px', '5px', '-1.5px']; 

$('#field-'+i+' .name').css({ 
    top: '30%', 
    width: '100%', 
    'letter-spacing': values[ i ], 
}); 
+0

如果只有兩個可能的值,則不需要額外編碼。 –

+0

@Radio:我想,「倍數」通常意味着超過「兩個」值。 – jAndy

+0

兩個以上是3+。 –

1

如果你有很多的選擇,考慮散列:代替

'letter-spacing': hash[i] || '-1px' 

如果您i是一個整數,你可以使用一個數組,:

var hash = { 
    1: '-2.5px', 
    3: '-1.5px' 
}; 

,然後一個哈希對象。但是,該對象更加靈活。

1

@ChrisFrancis:以表格的形式三元的變化:在這種情況下,與第一

`'letter-spacing': i == 1 ? '-2.5px' 
       : i == 3 ? '-1.5px' 
       :   '-1px' 

也許有點混亂「:」意思是別的東西,但季節品嚐

+0

根本不會造成混淆。看起來很清楚。 –

+0

啊gotcha,謝謝!是的,這實際上是一個很好的代表。也許我會從現在開始做這件事! :) –