api.jquery.com/delay : "Only subsequent events in a queue are delayed; for example this will not delay the no-arguments forms of .show() or .hide() which do not use the effects queue." removeClass also does not use the effects queue. (Don't feel bad; we've all tried to use delay() that way at some point.)
–
BlazemongerMar 26 '12 at 13:59

Description: Set a timer to delay execution of subsequent items in the queue.

and

The .delay() method is best for delaying between queued jQuery effects. Because it is limited—it doesn't, for example, offer a way to cancel the delay—.delay() is not a replacement for JavaScript's native setTimeout function, which may be more appropriate for certain use cases.