jQuery的:我可以调用addClass()之间的延迟()等?

一些简单的事情:

$("#div").addClass("error").delay(1000).removeClass("error");

似乎没有工作。 什么是最简单的select?

你可以创build一个新的队列项来完成你删除的类:

 $("#div").addClass("error").delay(1000).queue(function(next){ $(this).removeClass("error"); next(); }); 

或者使用出列方法:

 $("#div").addClass("error").delay(1000).queue(function(){ $(this).removeClass("error").dequeue(); }); 

您需要调用nextdequeue的原因是让jQuery知道您已经完成了这个排队的项目,并且应该继续下一个。

AFAIK延迟方法只适用于数字CSS修改。

为了其他目的,JavaScript提供了一个setTimeout方法:

 window.setTimeout(function(){$("#div").removeClass("error");}, 1000); 

jQuery的CSS操作不是排队的,但可以通过执行以下操作在“fx”队列中执行:

 $('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); }); 

与调用setTimeout完全相同,但使用jQuery的队列机制。

我知道这是一个很老的post,但我已经把一些答案结合到一个支持链接的jQuery包装函数中。 希望它有利于某人:

 $.fn.queueAddClass = function(className) { this.queue('fx', function(next) { $(this).addClass(className); next(); }); return this; }; 

这里是一个removeClass包装器:

 $.fn.queueRemoveClass = function(className) { this.queue('fx', function(next) { $(this).removeClass(className); next(); }); return this; }; 

现在你可以做这样的事情 – 等待1秒,添加.error ,等3secs,删除.error

$('#div').delay(1000).queueAddClass('error').delay(2000).queueRemoveClass('error');

延迟在队列上运行。 而据我所知,css操作(除了通过animation)不排队。

当然,如果你像这样扩展jQuery,会更简单:

 $.fn.addClassDelay = function(className,delay) { var $addClassDelayElement = $(this), $addClassName = className; $addClassDelayElement.addClass($addClassName); setTimeout(function(){ $addClassDelayElement.removeClass($addClassName); },delay); }; 

之后,你可以使用像addClass这样的function:

 $('div').addClassDelay('clicked',1000); 

尝试这个:

 function removeClassDelayed(jqObj, c, to) { setTimeout(function() { jqObj.removeClass(c); }, to); } removeClassDelayed($("#div"), "error", 1000);