Меня удивляют все ответы здесь ...
Попробуй это:
window.setTimeout(function() { }, 0);
Обратите внимание на тайм-аут 0. Это не произвольное число ... как я понимаю (хотя мое понимание может быть немного шатким), есть две очереди событий javascript - одна для макро-событий и одна для микро-событий. Очередь с «большей» областью действия содержит задачи, которые обновляют пользовательский интерфейс (и DOM), а микро-очередь выполняет операции типа быстрой задачи.
Также имейте в виду, что установка тайм-аута не гарантирует, что код будет работать точно с указанным значением. По сути, это помещает функцию в более высокую очередь (ту, которая обрабатывает UI / DOM) и не запускает ее раньше указанного времени.
Это означает, что установка тайм-аута, равного 0, помещает его в UI / DOM-часть очереди событий javascript для запуска при следующей возможности.
Это означает, что DOM обновляется со всеми предыдущими элементами очереди (например, вставленными через $.append(...);, и когда ваш код запускается, DOM полностью доступен.
(ps - я узнал об этом из Secrects of the JavaScript Ninja - отличной книги: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()занимает очень мало времени.