0

我的代码中有几个地方需要在多个不同的变量上测试是否为真 - 就像这样:

if(setting1){ Do something with El A };
if(setting2){ Do something with El B };
if(setting3){ Do something with El C };
if(setting4){ Do something with El D };

有没有更好的方法来写这个?

我已经用额外的细节更新了这个问题,但看起来 IF 块是最好的选择。

设置保存到 .data。这些设置是真/假,它们启用/禁用 HTML 元素。在我的脚本中的某些点,我需要在运行一些附加代码之前检查这些元素以查看它们是否已启用。例如,显示元素 - 如果用户已将 Nav 按钮的 .data 设置为 true - 则将显示 Nav 按钮。

if(setting1){ Do A to El A };

条件内的代码并没有真正的模式,所以我认为循环不是一个好的解决方案。同样,我认为 IF 块是最好的方法,但我很好奇是否有一些很酷的技巧来编写这个更清洁的东西。

if(setting1){ Do A to El A};
if(setting2){ Do B to El B};
if(setting3){ Do A to El A};
if(setting4){ Do X to El X};

谢谢!

4

4 回答 4

1

使用Array.forEach循环检查每个元素是否被禁用:

elements.forEach(function(el) {
    alert(el.disabled);
});
于 2013-02-23T03:36:37.280 回答
1

如果你不是 KISS 的一员,

var settingsAndEffects = 
[
    {'test': function(params) { return bool; }, // setting1
        'apply': function(params) { ... }}, // Do something with El A
    {'test': function(params) { return bool; }, // setting2
        'apply': function(params) { ... }}, // Do something with El B
    ...
]

for(var i = 0; i < settingsAndEffects.length; i++) 
{
    if(settingsAndEffects[i].test(params))
        settingsAndEffects[i].apply(params);
}

否则坚持ifs。

于 2013-02-23T03:00:52.283 回答
0

使用switch声明... [此处填充文字]

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Statements/switch

于 2013-02-23T02:48:39.793 回答
0

如果settingsX也是任意的,Do something并且设置与元素,设置与代码或元素与代码之间没有任何关系,那么我相信您的代码是最小的。我可以建议许多替代方式来表达它们——这可能有助于促进重用,但不会使代码更小——但我需要更多关于上下文的信息。

例如,如果代码和设置都特定于元素:

$("#elementA").data("DoSomething", function() { ... });
$("#elementB").data("DoSomething", function() { ... });

$(".my_elements")
    .filter(function() { return specificSettings(this); })
    .each(function() { $(this).data("DoSomething")(); });

请注意,生成的代码更加冗长,因此如果您在多个地方重用它,这只是一个优势。

于 2013-02-23T02:55:24.167 回答