Je suis surpris de toutes les réponses ici ...
Essaye ça:
window.setTimeout(function() { /* your stuff */ }, 0);
Notez le délai d'expiration 0. Ce n'est pas un nombre arbitraire ... si je comprends bien (bien que ma compréhension puisse être un peu fragile), il y a deux files d'attente d'événements javascript - une pour les événements macro et une pour les micro événements. La file d'attente à portée "plus grande" contient les tâches qui mettent à jour l'interface utilisateur (et le DOM), tandis que la micro file d'attente effectue des opérations de type tâche rapide.
Sachez également que définir un délai d'expiration ne garantit pas que le code fonctionne exactement à cette valeur spécifiée. Cela place essentiellement la fonction dans la file d'attente supérieure (celle qui gère l'interface utilisateur / DOM) et ne l'exécute pas avant l'heure spécifiée.
Cela signifie que la définition d'un délai d'expiration de 0 le place dans la partie UI / DOM de la file d'attente d'événements de javascript, pour être exécuté à la prochaine occasion.
Cela signifie que le DOM est mis à jour avec tous les éléments de file d'attente précédents (tels que l'insertion via $.append(...);
, et lorsque votre code s'exécute, le DOM est entièrement disponible.
(ps - j'ai appris cela de Secrects of the JavaScript Ninja - un excellent livre: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()
prend très peu de temps.