Современный эквивалент
function onReady(fn) {
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', fn, { once: true });
} else {
fn();
}
}
onReady(() => {
console.log('DOM ready');
});
Скрипты с defer / type="module" и так выполняются после разбора HTML.
Не путайте с window.onload — тот ждёт картинки и прочие ресурсы.
Итог
DOMContentLoaded + проверка readyState = jQuery ready без jQuery.