Выдернул из jQuery реализацию обработчика события onDomReady. Для тех, кто не в курсе поясню, что это событие возникает, после того как весь html код страницы будет загружен браузером, но в отличие от window.load, срабатывает раньше того, как будут загружены все стили, скрипты, картинки и т.д. Т.е. если в своем JS вам надо провести какие-то манипуляции с DOM на странице до ее показа, то вам нужен именно этот метод. Вы, конечно, можете подключать jQuery целиком, и тогда в вашем распоряжении будет этот метод. К примеру при подключенном jQuery установить событие можно так
$(function(){ alert('Привет Мир!!!') })
или так
$.ready(function(){ alert('Привет Мир!!!') })
Но бывают такие проекты, где хоть и очень легкая библиотека будет лишней, и приходится изобретать велосипед.
Я фанат jQuery и считаю что ее исходный код приближен к идеальному, и лично я лучше точно не напишу. Поэтому когда мне понадобился метод onDomReady я просто позаимствовал его из этой библиотеки.
Вот и сам код
(function(){ var readyBound = false; var bindReady=function(){ if ( readyBound ) return; readyBound = true; if ( document.addEventListener ) { document.addEventListener( "DOMContentLoaded", function(){ document.removeEventListener( "DOMContentLoaded", arguments.callee, false ); ready(); }, false ); } else if ( document.attachEvent ) { document.attachEvent("onreadystatechange", function(){ if ( document.readyState === "complete" ) { document.detachEvent( "onreadystatechange", arguments.callee ); ready(); } }); if ( document.documentElement.doScroll && window == window.top ) (function(){ if ( isReady ) return; try { document.documentElement.doScroll("left"); } catch( error ) { setTimeout( arguments.callee, 0 ); return; } ready(); })(); } if (window.addEventListener) window.addEventListener('load', ready, false); else if (window.attachEvent) window.attachEvent('onload', ready); else window.onload=ready; } var isReady=false var readyList= []; var ready=function() { if ( !isReady ) { isReady = true; if ( readyList ) { var fn_temp=null while(fn_temp=readyList.shift()){ fn_temp.call( document); } readyList = null; } } } domReady=function(fn) { bindReady(); if ( isReady ) fn.call(document); else readyList.push( fn ); return this; } })();
Пользоваться этим очень просто
domReady(function(){ alert('Привет любитель готовых велосипедов!!!'); });
Кто не верит что это чудо работает посмотрите пример работы onDomReady
Комментарии
alert("yo") срабатывает ПОСЛЕ заргузки и CSS и картинок и прочего добра...
Не проще ли ДЕЙСТВИТЕЛЬНО не изобретать велик и просто подвесить body событие onload?
Эффект тот же))))
А вообще, если немного пофилосовствовать на тему начальной загрузки странички, то могу сказать следующее:
1. Браузерам в 21 веке абсолютно начхать где он встретит "script type='text/javascript'", хоть после "" и 100500 пробелов, хоть до "" - он выполнит ваш скрипт. В этом четко просматривается американский подход к делу и можно уйти от четкого и структурированого кода. И в принципе это не плохо, это облегчает жизнь. Так что если у вас не очень мудренные, простенькие скрипты, управляющие элементами DOM - просто пишите их перед закрывающим body, т.е. в конце странички. А если скрипты не взаимодействуют с элементами - то можно и в шапке... для красоты)))))