Альтернатива ответу @ tv:
var elems = $(parentSelect).nextAll(), count = elems.length;
elems.each( function(i) {
$(this).fadeOut(200, function() {
$(this).remove();
if (!--count) doMyThing();
});
});
Обратите внимание, что .each()
сам по себе синхронный & mdash; оператор, следующий за вызовом .each()
, будет выполнен только после завершения вызова .each()
. Однако асинхронные операции , запущенные в итерации .each()
, конечно, будут продолжаться по-своему. В этом-то и проблема: вызовы для затухания элементов являются анимацией, управляемой таймером, и они продолжаются в своем собственном темпе.
Поэтому решение, приведенное выше, отслеживает, сколько элементов исчезло. Каждый вызов .fadeOut()
получает обратный вызов завершения. Когда обратный вызов замечает, что он подсчитывается по всем задействованным исходным элементам, некоторые последующие действия могут быть предприняты с уверенностью, что все замирания завершены.
Это четырехлетний ответ (на данный момент в 2014 году). Современный способ сделать это, вероятно, включал бы использование механизма отложенного / обещания, хотя вышеприведенное просто и должно работать нормально.