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

how can I convert the if block with insertAfter and insertBefore code in ternary way?

本文关键字:方式 转换 if insertAfter 何用 insertBefore 代码      更新时间:2023-09-26

如何以三进制方式转换以下代码?

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

这将起作用:

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");
}

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

当每行只有一个表达式时,可以进行此转换

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在一行中写下这一点。