Javascript jQuery:如果在链中?
我有这个Javascript jQuery:如果在链中?,javascript,jquery,if-statement,method-chaining,chain,Javascript,Jquery,If Statement,Method Chaining,Chain,我有这个 if(noDelay){ $(element).find("." + options.class).remove(); } else { $(element).find("." + options.class).fadeOut().remove(); } 有没有办法避免重复这句话,而只在满足给定条件时添加fadeOut() 我无法移动fadeOut() 我在想 $(element).find("." + options.class).(if(noDelay) fadeOut(
if(noDelay){
$(element).find("." + options.class).remove();
} else {
$(element).find("." + options.class).fadeOut().remove();
}
有没有办法避免重复这句话,而只在满足给定条件时添加fadeOut()
我无法移动fadeOut()
我在想
$(element).find("." + options.class).(if(noDelay) fadeOut()).remove();
提前感谢,,
狮子座你可以用$0.fn.每个:
$(element).find("." + options.class).each(function(){
if (nodelay) {
$(this).remove();
}
else {
$(this).fadeOut().remove();
}
});
然而,它远不如简单地做你已经在做的事情有效
编辑:这里有另一种方法:
$(element).find("." + options.class)[ noDelay ? "detach" : "fadeOut" ]().remove();
基本上,如果noDelay为true,它将在移除之前分离元素,否则,它将在移除之前淡出元素。应该与您的代码一样高效,只需一行。没有您想要的文档,但这可能对您有用:
$(element).find("." + options.class).fadeOut(noDelay ? 0 : 400).remove();
为什么是400,因为淡出的默认持续时间是400毫秒。有人反对这样的事情吗
var $found = $(element).find("." + options.class);
if (noDelay){
$found.remove();
} else {
$found.fadeOut().remove();
}
或者你可以使用一个可怕的黑客:
$(element).find(…)[ nodelay ? 'somenoopfunction' : 'fadeOut' ]().remove();
这一特殊问题:
尝试稍微重新思考一下逻辑,让节点延迟实际影响延迟
虽然我不确定是否需要remove()
当我为另一个问题做fadeOut()
测试时,它似乎隐藏并折叠了元素remove()
将从DOM中完全删除该元素,但如果您只是想让它从文档中消失并停止影响文档流(没有间隙),我不确定是否有必要这样做
真正目标:
另外,看起来您正计划包装jQuery。您最终将像这样包装代码:
$("someElement").find(".someClass").fadeOut().remove();
…并将其更改为:
fadeOut("someElement", { "class" : "someClass" });
…或:
var element = new SomeClass("someElement");
element.options.class = "someClass";
element.fadeOut();
除非您打算大量重用该特定元素,否则我认为您将浪费时间。jQuery对于一次性操作具有非常有效的语法,并且您可以始终将匹配的元素存储在临时变量中
如果你有我没有想到的其他目的,请原谅我打扰你的设计:)也请告诉我。但是,您是否可以使用'normal'
而不是400
?基于slow
和fast
有效,但不是normal
。您可以使用任何字符串表示默认值,如果该字符串无法识别且无法转换为整数,则默认为默认持续时间。可能最好使用“正常”而不是400,以防页面上的默认持续时间发生更改。您也可以使用$.fx.speeds.\u默认值代替400,它将等于400,除非从默认值改为其他值,而不依赖于计算“正常”是什么。LEOPiC你也应该检查@KevinB的答案。他的替代方法非常好。+1表示替代函数语法非常有用。耶,JavaScript:)我不知道我能做到这一点,你能给我指一些文档吗,我可以在那里读到关于以这种方式定义和执行函数的内容吗?我没有关于它的教程,但这里有一个小提琴来解释它。不是真的,那是选项b,因为它非常容易看,并且消除了大部分重复,但我相信我会尝试Emre Erkan的解决方案,谢谢你tho:)我同意这感觉很粗糙,但是“.fadeOut(noDelay?0:400)”在我看来解决了它,非常感谢tho:)代码是小部件的一部分,$(元素)指的是小部件将自上而下工作的元素,因此我将经常使用它:)小部件将始终淡出元素,但出于单元测试的目的,我希望更快(即避免淡出)。非常感谢您的输入,tho,非常感谢:)是的,谢谢,我修改了我的原始评论以匹配您的答案。
fadeOut("someElement", { "class" : "someClass" });
var element = new SomeClass("someElement");
element.options.class = "someClass";
element.fadeOut();