Estou surpreso com todas as respostas aqui ...
Experimente isto:
window.setTimeout(function() { /* your stuff */ }, 0);
Observe o 0 tempo limite. Não é um número arbitrário ... como eu entendo (embora meu entendimento possa ser um pouco instável), há duas filas de eventos javascript - uma para eventos macro e outra para microeventos. A fila com escopo "maior" contém tarefas que atualizam a IU (e DOM), enquanto a micro fila executa operações do tipo tarefa rápida.
Observe também que definir um tempo limite não garante que o código seja executado exatamente no valor especificado. O que isso faz é essencialmente colocar a função na fila superior (aquela que lida com a UI / DOM) e não a executa antes do tempo especificado.
Isso significa que definir um tempo limite de 0 o coloca na parte da IU / DOM da fila de eventos do javascript, para ser executado na próxima chance possível.
Isso significa que o DOM é atualizado com todos os itens anteriores da fila (como inserido via $.append(...);
e, quando o código é executado, o DOM está totalmente disponível.
(ps - Aprendi isso em Secrects of the JavaScript Ninja - um excelente livro: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()
leva muito pouco tempo.