1

JavaScript 中多个 if 简写的语法是什么?

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

我希望 letter-spacing 有多个速记,例如:

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

6 回答 6

2

实际上,如果您想在一行代码中使用多个三元运算符,那么内联多个三元运算符并没有错或不好,但是您可以在那里使用更具可读性的样式。

但是,我的建议是使用查找对象或Array,尤其是当您有很多不同的状态时。

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

$('#field-'+i+' .name').css({
    top: '30%',
    width: '100%',
    'letter-spacing': values[ i ],
});
于 2012-10-11T22:09:42.717 回答
1

你只是错过了:完成你的第一个条件:

我添加了一些括号以提供一些帮助:

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

于 2012-10-11T22:08:50.383 回答
1
i === 1 ? '-2.5px' : i === 3 ? '-1.5px' : '-1px'
于 2012-10-11T22:08:52.540 回答
1

看起来你在谈论嵌套的三元表达式 - 我倾向于缩进如下:

'letter-spacing': i==1 
    ? '-2.5px' 
    : i==3 
        ? '-1.5px' 
        : '-1px'
于 2012-10-11T22:09:12.713 回答
1

如果您有很多选择,请考虑使用哈希:

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

进而:

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

如果你i是一个整数,你可以使用一个数组,而不是一个哈希对象。但是,对象更灵活。

于 2012-10-11T22:10:21.340 回答
1

@ChrisFrancis:表格三元变体:

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

在这种情况下,第一个“:”可能有点混淆,意思是别的东西,但是要调味

于 2012-10-11T22:14:51.167 回答