2016-12-10 3 views
-2

у меня есть это:Как я могу превратить инструкцию if-else в тернарный оператор?

if (THIS.target.hasClass('icon-false-shape')) { 
     $(this).addClass('white-font'); 
     if (THIS.answer === false) { 
      console.log('EVERYTHING COMES GREEN'); 
      $(this).addClass('background-green'); 
     } else { 
      $(this).addClass('background-red'); 
     } 
    } 
    if (THIS.target.hasClass('icon-true-shape')) { 
     $(this).addClass('white-font'); 
     if (THIS.answer === true) { 
      console.log('EVERYTHING COMES GREEN'); 
      $(this).addClass('background-green'); 
     } else { 
      $(this).addClass('background-red'); 
     } 
    } 

, который я пытаюсь превратить это:

$(this).addClass('background-' + ((THIS.target.hasClass('icon-false-shape') && THIS.answer === false) ? 'green' : 'red')) 
    .addClass('white-font'); 

    $(this).addClass('background-' + ((THIS.target.hasClass('icon-true-shape') && THIS.answer === true) ? 'green' : 'red')) 
    .addClass('white-font'); 

Но моя логика терпит неудачу.

Любые предложения?

+1

eg. '$ (this) .addClass ('background-' + (THIS.answer? 'red': 'green'));' –

+0

@JaromandaX Я знаю, но я говорю, что я не могу приспособить то, что у меня есть к троичному. – NietzscheProgrammer

+0

О, ну ... вы хотите, чтобы в миксе даже символ «icon-false-shape/icon-true-shape» - вы предпочитаете короткий нечитаемый код для очистки кода –

ответ

1

Я хотел бы использовать $.toggleClass, который обрабатывает состояние внутри - см:

$(this).addClass('white-font'); 
$(this).toggleClass('background-green', THIS.answer === true); 
$(this).toggleClass('background-red', THIS.answer === true); 

Или ловить оба случая, перемещая условие в отдельной переменной:

var shouldBeGreen = THIS.target.hasClass('icon-false-shape') && THIS.answer === false; 
var shouldBeRed = THIS.target.hasClass('icon-true-shape') && THIS.answer === true; 
$(this).toggleClass('background-green', shouldBeGreen); 
$(this).toggleClass('background-red', shouldBeRed); 
1

Сначала мы обратили внимание на условия для будь то красный или зеленый (в этом случае я использую критерии: «красный»):

  • (THIS.target.hasClass('icon-false-shape') && THIS.answer !== false)
  • или (THIS.target.hasClass('icon-true-shape') && THIS.answer === false)

, если ни один из критериев не выполняется, это должно быть "зеленый".

$(this).addClass('white-font background-' + (((THIS.target.hasClass('icon-false-shape') && THIS.answer !== false) || (THIS.target.hasClass('icon-true-shape') && THIS.answer === false)) ? 'red' : 'green')); 

Также обратите внимание, что вы можете использовать пробел, чтобы добавить несколько классов $(this).addClass("white-font " + ...)" вместо этого $(this).addClass(...).addClass("white-font").

Смежные вопросы