Tôi ngạc nhiên về tất cả các câu trả lời ở đây ...
Thử cái này:
window.setTimeout(function() { /* your stuff */ }, 0);
Lưu ý thời gian chờ 0. Đó không phải là một con số tùy ý ... như tôi hiểu (mặc dù sự hiểu biết của tôi có thể hơi sai), có hai hàng đợi sự kiện javascript - một cho các sự kiện vĩ mô và một cho các sự kiện vi mô. Hàng đợi có phạm vi "lớn hơn" chứa các tác vụ cập nhật giao diện người dùng (và DOM), trong khi hàng đợi vi mô thực hiện các thao tác loại tác vụ nhanh.
Cũng nhận ra rằng việc đặt thời gian chờ không đảm bảo rằng mã hoạt động chính xác ở giá trị được chỉ định đó. Những gì điều này làm về cơ bản là đặt hàm vào hàng đợi cao hơn (hàng xử lý UI / DOM) và không chạy nó trước thời gian đã chỉ định.
Điều này có nghĩa là việc đặt thời gian chờ bằng 0 sẽ đưa nó vào phần UI / DOM của hàng đợi sự kiện của javascript, để được chạy vào cơ hội có thể tiếp theo.
Điều này có nghĩa là DOM được cập nhật với tất cả các mục hàng đợi trước đó (chẳng hạn như được chèn qua $.append(...);
và khi mã của bạn chạy, DOM hoàn toàn có sẵn.
(ps - Tôi học được điều này từ Secrects of the JavaScript Ninja - một cuốn sách tuyệt vời: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()
mất rất ít thời gian.