690
 

Проверка загрузки DOM

Событие onload, которое вызывается для выполнения каких-либо действий при загрузке страницы, не всегда дает желаемые результаты. Проблемы здесь кроются в том, что это событие вызывается в том момент, когда страница загрузилась целиком, включая все изображения, флэш анимацию и т.п. Иногда более подходящим моментом для выполнения манипуляция с DOM является момент полной загрузки структуры документа DOM, когда с ней уже можно работать. Чтобы определить этот момент, можно воспользоваться следующим методом:

function domReady( f ) {
    if ( domReady.done ) return f();

    if ( domReady.timer ) {
        domReady.ready.push( f );
    } else {
        if (window.addEventListener)
            window.addEventListener('load',isDOMReady, false);
        else if (window.attachEvent)
            window.attachEvent('onload',isDOMReady);

        domReady.ready = [ f ];
        domReady.timer = setInterval( isDOMReady, 13 );
    }
}

function isDOMReady(){
    if ( domReady.done ) return false;

    if ( document && document.getElementsByTagName && document.getElementById && document.body ) {
        clearInterval( domReady.timer );
        domReady.timer = null;

        for ( var i = 0; i < domReady.ready.length; i++ )
            domReady.ready[i]();

        domReady.ready = null;
        domReady.done = true;
    }
}

Функция isDOMReady() последовательно обращается к объектам и свойствам document, document.getElementsByTagName document.getElementById и document.body при помощи функции setTimeout() до тех пор, пока структура DOM не будет полностью загружена. Чтобы выполнить какую-либо функцию при загрузке DOM, добавьте её или ссылку на неё как аргумент в функцию domReady():

domReady(function(){alert('hello');});
Добавить в закладки:
Maklay.com - Большой каталог товаров для спорта и активного отдыха

Комментарии на “Проверка загрузки DOM”

  1. при вызове переданной функции нужно делать domReady.done = false; иначе функция выполняется два раза (по крайней мере у меня на локале)

    function domReady( f ) {
    if ( domReady.done ) {
    domReady.done = false;
    return f();
    }

    if ( domReady.timer ) {
    domReady.ready.push( f );
    } else {
    if (window.addEventListener)
    window.addEventListener(’load’,isDOMReady, false);
    else if (window.attachEvent)
    window.attachEvent(’onload’,isDOMReady);

    domReady.ready = [ f ];
    domReady.timer = setInterval(isDOMReady, 50);
    }
    }

Оставить комментарий

JSToolbox создан на основе WordPress