如何用insertAfter和insertBefore代码以三元方式转换if块?

时间:2014-04-15 11:59:14

标签: javascript jquery ternary-operator

如何以三元方式转换下面的代码?

if(epaper.othermakemodel.is(':checked')){
$("#dcolor").insertAfter("#lmodel");
}else{
$("#dcolor").insertBefore("#otherlabeldiv");
}

2 个答案:

答案 0 :(得分:5)

这样可行:

var c = epaper.othermakemodel.is(':checked');
$("#dcolor")["insert" + (c ? "After" : "Before")](c ? "#lmodel" : "#otherlabeldiv");

甚至是单行:

$("#dcolor")["insert" + (epaper.othermakemodel.is(':checked') ? "After" : "Before")](epaper.othermakemodel.is(':checked') ? "#lmodel" : "#otherlabeldiv");

然而,为了使用运算符,这只是使用三元运算符。

保持代码简短,但更重要的是,保持代码可读

var element = $("#dcolor");
if(epaper.othermakemodel.is(':checked')){
    element.insertAfter("#lmodel");
}else{
    element.insertBefore("#otherlabeldiv");
}

如果你必须在一年后维护你的代码,这将使所有人都头疼。

答案 1 :(得分:2)

如果每行只有一个表达式

,则可以执行此转换
condition ?     // if (condition)
    expr_true   //     expr_true;
:               // else
    expr_false; //     expr_false;

所以你的会变成

epaper.othermakemodel.is(':checked') ?
    $("#dcolor").insertAfter("#lmodel")
:
    $("#dcolor").insertBefore("#otherlabeldiv");
但是,在你的情况下,它并没有真正有用。

请记住,大多数空白在 JavaScript 中没有意义,所以你甚至可以用if..else在一行上写这个。