Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.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 缩短JQuery代码段_Javascript_Jquery - Fatal编程技术网

Javascript 缩短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(

我有以下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().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();