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