Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有一种方法仅在条件为true时执行jQuery链接的分支_Javascript_Jquery_Conditional Statements - Fatal编程技术网

Javascript 是否有一种方法仅在条件为true时执行jQuery链接的分支

Javascript 是否有一种方法仅在条件为true时执行jQuery链接的分支,javascript,jquery,conditional-statements,Javascript,Jquery,Conditional Statements,我对jQuery的熟练程度大概是7到8分(1-10分),所以我不确定这是否有意义,但我想知道是否有人知道jQuery函数或插件,它只允许在给定条件为真的情况下执行jQuery的分支。否则,我很想听听是否有人认为这个概念在某些方面存在缺陷(编辑以及它是如何存在缺陷的) 虽然可以使用与以下类似的常规JavaScript语法控制各种事件的附件: var desiredElement = $('.parent') // find the parent ele

我对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中是否有一些基本上已经做到了这一点
  • 是否已经有一个扩展允许这种类型的事情
  • 这比我想象的要难吗?(我认为,如果条件为真,则保留当前元素集;如果条件为假,则推送一个空元素集,然后为每个
    条件弹出元素集就可以了,就像
    end()
    方法在
    find()
    调用后弹出上一个元素集一样)
  • 有没有什么东西使它的效率大大降低
编辑


问题是如何使用方法链接,或者为什么不建议使用方法链接(首选具体细节)。虽然它不要求替代方案,但这些替代方案可能是用jQuery链接方法解释问题所必需的。此外,由于上面的示例立即计算布尔值,任何其他解决方案都应该这样做。

您不能在处理程序中执行该条件逻辑吗

var boolVar1 = true,
    boolVar2 = false;

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

在某个地方肯定有它的插件,我以前在jQuery论坛上看到过它作为答案发布。虽然我不同意这种语法,但它增加了更多的函数调用,这并不一定会使编码更容易。虽然我欣赏大家的评论(尤其是@tereško-尽管我不确定我是否同意),但我仍然没有看到我的任何问题的实际答案,所以我要坚持一段时间,你不知道方法链接是有害的做法吗?@tereško-我不知道它会有多有害,尽管我可以想象这可能不是最好的解决方案。它有什么害处?潜在不稳定?效率低下?如果效率低下,那么大约达到什么程度?——在效率方面,如何衡量开发时间与程序效率之间的权衡?难道不是所有高级语言(尤其是非编译语言)的效率都比字节码低吗?它们肯定更容易写@tereško-如果方法链接是“有害的做法”,那么我可以假定您根本不使用jQuery吗?除非我猜错了,否则在jQuery中,如果不使用一些方法链接,就无法完成任何事情。链的使用是否有一个特定的阈值或限制,超过该阈值或限制会变得更有害?至于效率低下,框架和/或代码重用的概念常常需要这些效率低下首先感谢您的回答-我没有考虑到这一点-而我并不介意少量的“纯”JavaScript(毕竟,它应该更高效-对吗?)这个问题特别询问了jQuery链接的使用——要么是原生jQuery,要么是插件,要么是因为某种原因,我自己做比较难,或者是一个很糟糕的主意。此外,这个问题还强烈暗示了布尔变量的立即计算,不会延迟到单击事件发生之前-如果变量在单击之前因任何原因发生更改,这将改变行为-我将进行编辑以使其生效explicit@rlemon-我很欣赏jQuery是一个库,
$()
函数可以做很多事情。“开发时间/效率”权衡永远是一个合理的事情,在基本的例子中,开发时间没有很大的不同——也许这就是为什么他们没有将它添加到jQuery(没有足够的储蓄来证明额外的处理所需的理由),但是,这不是答案的一部分。这个答案在基本层面上与问题中的代码表现不同,就像成真一样。说真的,你想要的东西可以用
?:
操作符来完成,就像添加数字可以用
+
操作符来完成一样,你不需要jQuery插件。是的-我认为这很清楚-一种在不丢失jQuery选择器“上下文”的情况下将条件插入jQuery方法链的能力而且不必担心暂时将其存储在变量中-尽管这张图片很有趣。。。不知道如何使用jQuery添加数字,甚至不知道如何设计该数字。。。嗯……)——三元
?:
运算符用于另一个答案-如果您认为这是解决问题的最佳方法,请随意向上投票go@ElliotBonneville(我希望)没有。我的观点是,如果有人愿意,他们可以做一个,但这不是必要的,因为任务很琐碎。谢谢!这在精神上似乎更接近于我希望找到的,并且可能足够好来工作。我相信我避免了这种策略,因为类似的尝试会弄乱“关联数组”中的css选择器(比如where
…css({(boolVar?“left”:“right”):“30px”})
会导致错误)。它应该立即对布尔值进行评估,但仍然不像我认为的jQuery链接那个样“漂亮”——假设它能工作,并且并没有更好的答案,我会在某个时候接受它point@CodeJockey正确的。这是因为它在语法上是无效的()。此代码在中按您的意愿工作
$('.parent').hover(overFunction,offFunction)
    .find('.child-element')
    .click( booleanVar ? clickFunction1 :
            booleanVar2 ? clickFunction2 :
            clickFunction3 )
    .end()
    .find('.other-child')
    .css(SomePredefinedCssMapping)