我有这个
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 :(得分:11)
没有任何记录,如你所愿,但也许这对你有用:
$(element).find("." + options.class).fadeOut(noDelay ? 0 : 400).remove();
为什么选择400,因为fadeOut的默认持续时间为400毫秒。 (from documentation)
答案 1 :(得分:3)
您可以使用$ .fn.each:
执行此操作$(element).find("." + options.class).each(function(){
if (nodelay) {
$(this).remove();
}
else {
$(this).fadeOut().remove();
}
});
然而,它的效率远远低于仅仅做你已经做过的事情。
编辑:这是另一种方法:
$(element).find("." + options.class)[ noDelay ? "detach" : "fadeOut" ]().remove();
基本上,如果noDelay为true,它将在删除之前分离元素,否则,它会在删除之前淡出它们。应该和你的代码一样高效,只需1行。
答案 2 :(得分:2)
对这样的事情有异议吗?
var $found = $(element).find("." + options.class);
if (noDelay){
$found.remove();
} else {
$found.fadeOut().remove();
}
答案 3 :(得分:2)
var els = $(element).find("." + options.class);
if (!nodelay) els.fadeOut();
els.remove();
或者你可以使用可怕的黑客攻击:
$(element).find(…)[ nodelay ? 'somenoopfunction' : 'fadeOut' ]().remove();
答案 4 :(得分:1)
尝试稍微重新考虑逻辑,并使noDelay
实际影响延迟。
$(element).find("." + options.class).fadeOut(noDelay ? 0 : 'normal').remove();
虽然我不确定remove()
是否有必要。
当我对另一个问题进行fadeOut()
测试时,它似乎隐藏并折叠元素。 remove()
会从DOM中完全删除该元素,但我不确定是否有必要让它从文档中消失并让它停止影响文档流(没有间隙)。< / p>
此外,您似乎计划包装jQuery。你最终会包装这样的代码:
$("someElement").find(".someClass").fadeOut().remove();
...并将其更改为:
fadeOut("someElement", { "class" : "someClass" });
...或:
var element = new SomeClass("someElement");
element.options.class = "someClass";
element.fadeOut();
除非你计划重复使用那个特定元素,否则我认为你会浪费你的时间。 jQuery具有非常高效的一次性操作语法,您始终可以将匹配的元素存储在临时变量中。
如果您有其他一些我想念的目的,请原谅这种对您设计的干扰:)