我有以下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开发人员工具报告语法错误,但我不够熟练,无法确定如何正确地完成它。
如果不能缩短,那就说好了:)
答案 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
,如果0
为if(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();
......但在那之后,链接朝着不同的方向发展。
答案 2 :(得分:0)
也许有点偏离主题,所以我把它变成了CW,但是:当事情变得像这样长时,我可以直接投标以获得好的老式if/else
陈述吗?
someVar.fadeOut();
if (someVar.next().length === 0) {
someVar.end().find("ul").first().fadeIn();
}
else {
someVar.next().fadeIn();
}
大约八倍易于阅读和维护,恕我直言。