Sono sorpreso di tutte le risposte qui ...
Prova questo:
window.setTimeout(function() { /* your stuff */ }, 0);
Notare il timeout 0. Non è un numero arbitrario ... a quanto ho capito (anche se la mia comprensione potrebbe essere un po 'traballante), ci sono due code di eventi javascript: una per gli eventi macro e una per i micro eventi. La coda con ambito "più grande" contiene attività che aggiornano l'interfaccia utente (e DOM), mentre la coda micro esegue operazioni di tipo attività rapida.
Renditi conto anche che l'impostazione di un timeout non garantisce che il codice funzioni esattamente al valore specificato. Ciò che fa è essenzialmente mette la funzione nella coda più alta (quella che gestisce l'interfaccia utente / DOM) e non la esegue prima del tempo specificato.
Ciò significa che l'impostazione di un timeout di 0 lo inserisce nella porzione UI / DOM della coda degli eventi di javascript, da eseguire alla prossima possibilità possibile.
Ciò significa che il DOM viene aggiornato con tutti gli elementi della coda precedenti (come quelli inseriti tramite $.append(...);, e quando il codice viene eseguito, il DOM è completamente disponibile.
(ps - l'ho imparato da Secrects of the JavaScript Ninja - un libro eccellente: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()richiede pochissimo tempo.