Я дивуюсь на всі відповіді тут ...
Спробуйте це:
window.setTimeout(function() { }, 0);
Зверніть увагу на тайм-аут 0. Це не довільне число ... наскільки я розумію (хоча моє розуміння може бути дещо хитким), є дві черги подій javascript - одна для макро подій та одна для мікро подій. У "більшій" області дії входить область завдань, які оновлюють інтерфейс користувача (і DOM), тоді як мікрочерга виконує операції типу швидкого завдання.
Також розумійте, що встановлення тайм-ауту не гарантує, що код працює точно за вказаним значенням. Це робить, по суті, поміщає функцію у вищу чергу (ту, яка обробляє UI / DOM), і не запускає її до зазначеного часу.
Це означає, що встановлення тайм-ауту 0 поміщає його в UI / DOM-частину черги подій javascript, яка запускатиметься з наступним можливим шансом.
Це означає, що DOM оновлюється з усіма попередніми елементами черги (наприклад, вставленими через $.append(...);, і коли ваш код працює, DOM є повністю доступним.
(ps - я дізнався про це з Secrets of JavaScript Ninja - відмінна книга: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()займає дуже мало часу.