jQuery:如果在链内

jQuery: if inside a chain?

本文关键字:如果 jQuery      更新时间:2023-09-26

我有这个

if(noDelay){
  $(element).find("." + options.class).remove();
} else {
  $(element).find("." + options.class).fadeOut().remove();
}

有没有办法避免重复句子,只在满足给定条件时才添加fadeOut()

我不能fadeOut()移动到链条的末端,这可能会让事情变得更容易。

我在想类似的事情

$(element).find("." + options.class).(if(noDelay) fadeOut()).remove();

提前感谢,狮子座

没有任何您想要的文档,但也许这对您有用:

$(element).find("." + options.class).fadeOut(noDelay ? 0 : 400).remove();

为什么选择 400,因为淡出的默认持续时间为 400 毫秒。(来自文档(

你可以

用$.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 行上。

对这样的事情有什么异议吗?

var $found = $(element).find("." + options.class);
if (noDelay){
  $found.remove();
} else {
  $found.fadeOut().remove();
}
var els = $(element).find("." + options.class);
if (!nodelay) els.fadeOut();
els.remove();

或者你可以使用一个可怕的黑客:

$(element).find(…)[ nodelay ? 'somenoopfunction' : 'fadeOut' ]().remove();

这个特殊的问题:

尝试稍微重新思考一下逻辑,并使noDelay实际影响延迟

$(element).find("." + options.class).fadeOut(noDelay ? 0 : 'normal').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对于一次性操作具有非常有效的语法,并且您始终可以将匹配的元素存储在临时变量中。

如果你有其他目的,而我错过了,请原谅这种对你的设计:)的入侵