Javascript 缩短JQuery代码段
我有以下JQuery代码段:Javascript 缩短JQuery代码段,javascript,jquery,Javascript,Jquery,我有以下JQuery代码段: (someVar.next().length == 0)?someVar.fadeOut().end().find("ul").first().fadeIn():someVar.fadeOut().next().fadeIn(); 在条件的两个结果之间有相当数量的代码重复,即someVar.fadeOut()和.fadeIn() 理想情况下,我想要这样的东西: someVar.fadeOut().((someVar.next().length == 0)?end(
(someVar.next().length == 0)?someVar.fadeOut().end().find("ul").first().fadeIn():someVar.fadeOut().next().fadeIn();
在条件的两个结果之间有相当数量的代码重复,即someVar.fadeOut()和.fadeIn()
理想情况下,我想要这样的东西:
someVar.fadeOut().((someVar.next().length == 0)?end().find("ul").first():next()).fadeIn();
((someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first")
: someVar.next()).fadeIn();
但是这不起作用:)Safari开发者工具报告了一个语法错误,但我没有足够的技术来解决如何正确地完成它
如果它不能被缩短,那么只说这很好:)不多,不-或者至少,不合理(有些游戏你可以用字符串和括号表示法玩,但它们会让你的例子更糟,而不是更好)。您可以将
fadeOut
移动到它自己的语句中:
someVar.fadeOut();
(someVar.next().length == 0)?someVar.end().find("ul").first().fadeIn():someVar.next().fadeIn();
…但在那之后,链条会向不同的方向移动
另请参见。不多,不-或至少不合理(有些游戏可以使用字符串和括号表示法,但它们会使示例变得更糟,而不是更好)。您可以将
fadeOut
移动到它自己的语句中:
someVar.fadeOut();
(someVar.next().length == 0)?someVar.end().find("ul").first().fadeIn():someVar.next().fadeIn();
…但在那之后,链条会向不同的方向移动
另请参见。我删除了.end()
,因为我看不出它有什么用处
否则,我只是将.fadeOut()
移动到条件测试中
(someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first").fadeIn()
: someVar.next().fadeIn();
或者这个
var $in = (someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first")
: someVar.next();
$in.fadeIn();
编辑:正如@T.J.Crowder所指出的,我删除
.end()
是不正确的。我没有意识到,如果你用以前的结果开始一个新的链,它会继续工作。不过还是有道理的。固定的
而且,我不知何故颠倒了第二个例子。固定的
另一次编辑: 第二个例子可以进一步简化如下:
someVar.fadeOut().((someVar.next().length == 0)?end().find("ul").first():next()).fadeIn();
((someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first")
: someVar.next()).fadeIn();
再编辑一次: 另一种可能是简单地
.fadeIn()
使用.next()
两种方法,如果其长度
为0
,则没有效果:
if(someVar.fadeOut().next().fadeIn().length == 0)
someVar.end().find("ul:first").fadeIn();
我删除了.end()
,因为我看不出它有什么用处
否则,我只是将.fadeOut()
移动到条件测试中
(someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first").fadeIn()
: someVar.next().fadeIn();
或者这个
var $in = (someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first")
: someVar.next();
$in.fadeIn();
编辑:正如@T.J.Crowder所指出的,我删除
.end()
是不正确的。我没有意识到,如果你用以前的结果开始一个新的链,它会继续工作。不过还是有道理的。固定的
而且,我不知何故颠倒了第二个例子。固定的
另一次编辑: 第二个例子可以进一步简化如下:
someVar.fadeOut().((someVar.next().length == 0)?end().find("ul").first():next()).fadeIn();
((someVar.fadeOut().next().length == 0)
? someVar.end().find("ul:first")
: someVar.next()).fadeIn();
再编辑一次: 另一种可能是简单地
.fadeIn()
使用.next()
两种方法,如果其长度
为0
,则没有效果:
if(someVar.fadeOut().next().fadeIn().length == 0)
someVar.end().find("ul:first").fadeIn();
也许有点离题了,所以我把它做成了CW,但是:当事情变得像这样长的时候,我能不能把我的出价投给好的老式的
if/else
语句
someVar.fadeOut();
if (someVar.next().length === 0) {
someVar.end().find("ul").first().fadeIn();
}
else {
someVar.next().fadeIn();
}
阅读和维护起来要容易八倍,IMHO。也许有点离题,所以我把它做成了CW,但是:当事情变得如此漫长时,我能不能就用老式的
if/else
语句
someVar.fadeOut();
if (someVar.next().length === 0) {
someVar.end().find("ul").first().fadeIn();
}
else {
someVar.next().fadeIn();
}
阅读和维护起来要容易八倍,IMHO。关于
结尾
,我们不知道他要结束什么过滤,可能是在他引用代码之前。。。很好地将.find(“ul”).first()
切换到.find(“ul:first”)
,不过,这样应该会更有效率。@T.J.-是的,你说得对。我原以为.end()
只能在当前链中工作,但它似乎适用于存储在变量中的前一个链的结果。我将更新。是的,我已经完成了前面的find()调用,因此需要end():)谢谢您的帮助help@Richard-我又添加了一个可能的解决方案。它消除了对else
的需要,因为它在条件测试中对.next()
执行fadeIn()
。这应该是无害的,因为如果length
是0
,那么就没有什么可以淡出的。我将fadeOut()和next()调用移到上一行(选择元素的位置),将(someVar.length==0)更改为(!someVar.length),将fadeIn()移到末尾的括号外,并更改了.end.find()从零开始选择,结果是:(!someVar.length)?$(“#someID ul:first”):someVar.fadeIn();我们不知道他在结束什么过滤,可能是在他引用的代码之前。。。很好地将.find(“ul”).first()
切换到.find(“ul:first”)
,不过,这样应该会更有效率。@T.J.-是的,你说得对。我原以为.end()
只能在当前链中工作,但它似乎适用于存储在变量中的前一个链的结果。我将更新。是的,我已经完成了前面的find()调用,因此需要end():)谢谢您的帮助help@Richard-我又添加了一个可能的解决方案。它消除了对else
的需要,因为它在条件测试中对.next()
执行fadeIn()
。这应该是无害的,因为如果length
是0
,那么就没有什么可以淡出的。我将fadeOut()和next()调用移到上一行(选择元素的位置),将(someVar.length==0)更改为(!someVar.length),将fadeIn()移到末尾的括号外,并更改了.end.find()从零开始选择,结果是:(!someVar.length)?$(“#someID ul:first”):someVar.fadeIn();