Jquery:if里面有几个比较,有什么方法可以写得更短吗?

时间:2010-09-30 13:43:31

标签: jquery if-statement

有这一行:

 if($('#address_nations_id').val() != 105 && $('#address_nations_id').val() != 74)

有没有办法缩短它?

我试过了:

if($('#address_nations_id').val() != 105 && != 74)

但它不起作用。

有什么想法吗?

此致

哈维尔

4 个答案:

答案 0 :(得分:4)

由于我猜测(基于ID)你想要检查许多,你可以使用$.inArray()轻松扩展该列表,例如:

if($.inArray($('#address_nations_id').val(), ["105", "74"]) > -1)

You can give it a try here,请记住,您需要使用此方法的字符串,因为JavaScript使用==进行弱键入不起作用,而.val()会返回一个字符串。

答案 1 :(得分:3)

您可以做的一件事是事先获得价值:

var val = $('#address_nations_id').val();
if(val != 105 && val != 74)

无论如何哪个更好,因为你只进行一次方法调用而不是两次。

如果你有很多值,我会像这样创建一个查找表:

var values = {
    "105": 1,
    "74": 1
}

并做

if(!($('#address_nations_id').val() in values)) {
    //...
}

这应该比搜索数组中的值快。(不确定这个)。

答案 2 :(得分:0)

var val = $('#address_nations_id').val();

if(val != '105' && val != '74') { 
  //do stuff
}

修改

$('#address_nations_id').val()返回的字符串不是数字

答案 3 :(得分:0)

我会选择Felix's suggestion。但仅仅是为了完整性:

在阵列上有indexOf的浏览器上,您可以执行以下操作:

if ([105, 74].indexOf(parseInt($('#address_nations_id').val())) >= 0)

...但我不会仅仅为两个值推荐它。它不太清晰,不必要地复杂,并且并非所有浏览器都拥有它(尚未)。大多数批评也适用于使用jQuery的inArray函数。

还有switch

switch (parseInt($('#address_nations_id').val())) {
    case 105:
    case 74:
        break;
    default:
        /* do your thing here *?
        break;
}

......但这几乎不可能更短,几乎肯定不适合只有两个值。