Как я могу преобразовать блок if с помощью кода insertAfter и insertBefore в троичном порядке?

0

как я могу преобразовать приведенный ниже код тройным способом?

if(epaper.othermakemodel.is(':checked')){
$("#dcolor").insertAfter("#lmodel");
}else{
$("#dcolor").insertBefore("#otherlabeldiv");
}
  • 0
    Почему вы хотите это сделать?
  • 0
    чтобы попасть в одну строку вместо 4-х строк
Показать ещё 1 комментарий
Теги:
ternary-operator

2 ответа

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
    +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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню