2012-10-11 86 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,谢谢!是的,这实际上是一个很好的代表。也许我会从现在开始做这件事! :) –