ฉันประหลาดใจกับคำตอบทั้งหมดที่นี่ ...
ลองสิ่งนี้:
window.setTimeout(function() { }, 0);
หมายเหตุการหมดเวลา 0 ไม่ใช่ตัวเลขตามอำเภอใจ ... อย่างที่ฉันเข้าใจ (แม้ว่าความเข้าใจของฉันอาจจะสั่นคลอนเล็กน้อย) มีคิวเหตุการณ์จาวาสคริปต์สองคิว - คิวหนึ่งสำหรับเหตุการณ์มาโครและอีกหนึ่งสำหรับเหตุการณ์ขนาดเล็ก คิวที่มีขอบเขต "ใหญ่กว่า" เก็บงานที่อัปเดต UI (และ DOM) ในขณะที่คิวขนาดเล็กดำเนินการประเภทงานด่วน
โปรดทราบด้วยว่าการตั้งค่าการหมดเวลาไม่ได้รับประกันว่าโค้ดจะทำงานตรงตามค่าที่ระบุ สิ่งนี้ทำให้ฟังก์ชันอยู่ในคิวที่สูงขึ้นเป็นหลัก (ฟังก์ชันที่จัดการ UI / DOM) และไม่เรียกใช้ก่อนเวลาที่กำหนด
ซึ่งหมายความว่าการตั้งค่าการหมดเวลาเป็น 0 จะทำให้มันอยู่ในส่วน UI / DOM ของคิวเหตุการณ์ของจาวาสคริปต์เพื่อให้รันในโอกาสถัดไปที่เป็นไปได้
ซึ่งหมายความว่า DOM ได้รับการอัปเดตด้วยรายการคิวก่อนหน้าทั้งหมด (เช่นแทรกผ่าน$.append(...);และเมื่อโค้ดของคุณทำงาน DOM จะพร้อมใช้งานอย่างสมบูรณ์
(ps - ฉันเรียนรู้สิ่งนี้จากSecrects of the JavaScript Ninja - หนังสือที่ยอดเยี่ยม: https://www.manning.com/books/secrets-of-the-javascript-ninja )
append()ใช้เวลาน้อยมาก