Есть ли способ выполнить цепочку ветвей jQuery только в том случае, если условие истинно

Я, вероятно, на 7 или 8 баллов по jQuery (по шкале 1 -10 ), поэтому я не уверен, что это имеет смысл, но я хотел бы знать, знает ли кто-нибудь о функции jQuery или, возможно, плагине, который позволяет ветвь jQuery для выполнения только в том случае, если заданное условие истинно. В противном случае, я хотел бы услышать, если кто-то думает, что концепция в чем-то ошибочна(РЕДАКТИРОВАТЬ и , как она ошибочна)

Хотя можно управлять присоединением различных событий с помощью обычного JavaScript синтаксис похож на этот:

var desiredElement = $('.parent')                        // find the parent element
                    .hover(overFunction,offFunction)    // attach an event while I've got the parent in 'scope'
                    .find('.child-element');            // then find and return the child
if (booleanVar1) {                                       // if one condition
    desiredElement.click(clickFunction1);                //   attach one event
} else if (booleanVar2) {                                // or if a different condition
    desiredElement.click(clickFunction2);                //   attach a different event
} else {                                                 // otherwise
    desiredElement.click(clickFunction3);                //   attach a default event
}
$('.parent').find('.other-child')                        // (or $('.parent.other-child')
   .css(SomePredefinedCssMapping)
   .hide()
//...

Мне было интересно, есть ли способ сделать все это в jQuery или есть веская причина не делать этого... что-то вроде этого:

$('.parent')                                // find the parent element
   .hover({overFunction,offFunction})      // attach an event while I've got the parent in 'scope'
   .find('.child-element')                 // then find the child
       .when(booleanVar1)                  // if one condition
           .click(clickFunction1)          //   attach one event
       .orWhen(booleanVar2)                // or if a different condition
           .click(clickFunction2)          //   attach a different event
       .orElse()                           // otherwise
           .click(clickFunction3)          //   attach a default event
       .end()
   .end()
   .find('.other-child')
       .css(SomePredefinedCssMapping)
//...

Примечание :Я думаю, что это синтаксически правильно, предполагая, что логические значения и функции определены надлежащим образом, но я почти уверен, что довольно ясно понял цель

предложенный jQuery кажется мне немного более аккуратным (?? )согласен/не согласен? -Итак, вот мои вопросы:

  • Есть ли какая-то часть нативного jQuery, которая в основном уже делает это?
  • Есть ли уже расширение, которое позволяет такие вещи?
  • Это труднее сделать, чем я думаю? (Я бы подумал, что что-то вроде сохранения текущего набора элементов, если условие истинно, нажатие пустого набора элементов, если условие ложно, а затем извлечение набора элементов обратно для каждого orусловия сделало бы это, точно так же, как Метод end()возвращает предыдущий набор после вызова find())
  • Есть ли что-то, что делает его значительно менее эффективным?

РЕДАКТИРОВАТЬ

Вопрос спрашивает, как это сделать с цепочкой методов или почему это было бы нецелесообразно (предпочтительными особенностями ).Хотя он не требует альтернатив, такие альтернативы могут быть необходимы для объяснения проблем с подходом цепочки jQuery. Кроме того, поскольку приведенный выше пример сразу оценивает логические значения, любое другое решение должно делать то же самое.

6
задан Code Jockey 27 April 2012 в 17:03
поделиться