Jestem zaskoczony wszystkimi odpowiedziami tutaj ...
Spróbuj tego:
window.setTimeout(function() { }, 0);
Zwróć uwagę na limit czasu 0. To nie jest dowolna liczba ... jak rozumiem (chociaż moje rozumienie może być nieco niepewne), istnieją dwie kolejki zdarzeń javascript - jedna dla zdarzeń makro i jedna dla zdarzeń mikro. „Większa” kolejka o zasięgu zawiera zadania, które aktualizują interfejs użytkownika (i DOM), podczas gdy mikro kolejka wykonuje operacje typu szybkiego zadania.
Pamiętaj również, że ustawienie limitu czasu nie gwarantuje, że kod będzie działał dokładnie przy tej określonej wartości. To zasadniczo powoduje umieszczenie funkcji w wyższej kolejce (tej, która obsługuje UI / DOM) i nie uruchamia jej przed upływem określonego czasu.
Oznacza to, że ustawienie limitu czasu na 0 powoduje umieszczenie go w części UI / DOM kolejki zdarzeń javascript, aby uruchomić ją przy najbliższej możliwej okazji.
Oznacza to, że DOM zostanie zaktualizowany o wszystkie poprzednie elementy kolejki (takie jak wstawione za pośrednictwem $.append(...);, a kiedy Twój kod zostanie uruchomiony, DOM jest w pełni dostępny.
(ps - nauczyłem się tego z Secrects of the JavaScript Ninja - świetnej książki: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()zajmuje bardzo mało czasu.