有没有办法在条件为真时执行jQuery链接的分支

时间:2012-04-26 19:13:36

标签: javascript jquery conditional-statements

我对jQuery的熟练程度大概是7或8(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链接方法的问题。此外,由于上面的示例会立即评估布尔值,因此任何其他解决方案都应该这样做。

2 个答案:

答案 0 :(得分:2)

你不能在你的处理程序中执行那个条件逻辑吗?

var boolVar1 = true,
    boolVar2 = false;

$(".foo").on("click", function(){
  if ( boolVar1 ) clickFunction1();
  if ( boolVar2 ) clickFunction2();
});

答案 1 :(得分:2)

$('.parent').hover(overFunction,offFunction)
    .find('.child-element')
    .click( booleanVar ? clickFunction1 :
            booleanVar2 ? clickFunction2 :
            clickFunction3 )
    .end()
    .find('.other-child')
    .css(SomePredefinedCssMapping)