缩短JQuery代码段

时间:2010-09-22 15:43:04

标签: 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().find("ul").first():next()).fadeIn();

但这不起作用:) Safari开发人员工具报告语法错误,但我不够熟练,无法确定如何正确地完成它。

如果不能缩短,那就说好了:)

3 个答案:

答案 0 :(得分:1)

我删除了.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所述。克劳德,我在删除.end()时不正确。如果您使用之前的结果启动新链,我没有意识到它会继续工作。虽然有道理。固定的。

另外,我以某种方式颠倒了第二个例子。固定的。


另一个编辑:

第二个例子可以进一步简化:

((someVar.fadeOut().next().length == 0) 
           ? someVar.end().find("ul:first")
           : someVar.next()).fadeIn();

再编辑:

另一种可能性是.fadeIn() .next()只是length,如果0if(someVar.fadeOut().next().fadeIn().length == 0) someVar.end().find("ul:first").fadeIn(); ,则无效:

{{1}}

答案 1 :(得分:0)

不是很多,没有 - 或者至少,不是以合理的方式(有些游戏你可以用字符串和括号表示法,但它们会使你的榜样变得更糟,而不是更好)。您可以将fadeOut移动到它自己的语句:

someVar.fadeOut();
(someVar.next().length == 0)?someVar.end().find("ul").first().fadeIn():someVar.next().fadeIn();

......但在那之后,链接朝着不同的方向发展。

另见my community wiki answer

答案 2 :(得分:0)

也许有点偏离主题,所以我把它变成了CW,但是:当事情变得像这样长时,我可以直接投标以获得好的老式if/else陈述吗?

someVar.fadeOut();
if (someVar.next().length === 0) {
    someVar.end().find("ul").first().fadeIn();
}
else {
    someVar.next().fadeIn();
}

大约八倍易于阅读和维护,恕我直言。