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();