Me sorprenden todas las respuestas aquí ...
Prueba esto:
window.setTimeout(function() { /* your stuff */ }, 0);
Tenga en cuenta el tiempo de espera 0. No es un número arbitrario ... según tengo entendido (aunque mi comprensión puede ser un poco inestable), hay dos colas de eventos de JavaScript: una para macroeventos y otra para microeventos. La cola de alcance "más grande" contiene tareas que actualizan la IU (y DOM), mientras que la micro cola realiza operaciones de tipo de tarea rápida.
También tenga en cuenta que establecer un tiempo de espera no garantiza que el código funcione exactamente en ese valor especificado. Lo que hace esto es esencialmente poner la función en la cola superior (la que maneja la interfaz de usuario / DOM) y no la ejecuta antes del tiempo especificado.
Esto significa que establecer un tiempo de espera de 0 lo coloca en la parte de UI / DOM de la cola de eventos de JavaScript, para que se ejecute en la próxima oportunidad posible.
Esto significa que el DOM se actualiza con todos los elementos de la cola anteriores (como los insertados a través de $.append(...);, y cuando se ejecuta su código, el DOM está completamente disponible.
(PD: aprendí esto de Secrects of the JavaScript Ninja , un excelente libro: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()toma muy poco tiempo.