Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамическое создание объектов в JS

477
23 сентября 2007 года
Robinnovich
182 / / 02.12.2006
При такой схеме создания:
Цитата:
this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);


Тупой ИЕ в некоторых случаях ругается на строку

Цитата:
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);


Есть подозрения что именно в том случи когда загружаются несколько JS файлов с динамическим созданием DIV – а результатом этой ошибки является то что ИЕ обрывает соединение с сервером
Как можно избежать данной проблемы? Может есть другие способы создания?

7.9K
23 сентября 2007 года
vasa_c
191 / / 05.04.2007
body то на этот момент загружено?
477
23 сентября 2007 года
Robinnovich
182 / / 02.12.2006
Да загружено потому что если перед этим кодом:
 
Код:
this.CalendarDIV = document.createElement("DIV");
this.CalendarDIV.setAttribute('id','Div'+ObjId);
this.CalendarDIV.className='DivElement';
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);

ставлю
 
Код:
if (!document.getElementsByTagName('body'))

Получается
 
Код:
if (document.getElementsByTagName('body')){
        this.CalendarDIV = document.createElement("DIV");
        this.CalendarDIV.setAttribute('id','Div'+ObjId);
            this.CalendarDIV.className='DivElement';  
            document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);
        }

То скрипит срабатывает что говорит о том что body есть.

Да еще раз повторюсь не работает только на ИЕ
27K
24 сентября 2007 года
AKS.
34 / / 27.08.2007
Цитата: Robinnovich

То скрипит срабатывает что говорит о том что body есть.


Body, может быть, и есть, а может и "не есть". Вы ведь проверяете наличие коллекции элементов <body> в документе:

 
Код:
if (document.getElementsByTagName('body'))

Но даже при наличии <body>:
 
Код:
if (document.getElementsByTagName('body').item(0))

может оказаться так, что содержимое тела документа загружено еще не полностью. И вот тогда и возникает ошика в IE...
7.8K
24 сентября 2007 года
Tingo
201 / / 17.05.2007
В таком случае, создания DIV'а можно прицепить к body onLoad...
32K
24 сентября 2007 года
amo25
6 / / 20.09.2007
document.getElementsByTagName('body')[0].appendChild(this.CalendarDIV);

можно написать проще:

document.body.appendChild(this.CalendarDIV);

но выполнять этот код это можно только после того, как браузер загрузил весь документ (и сформировал DOM). на коротких страничках и в некоторых браузерах может работать и без этого (при этом CalendarDIV может чудным образом оказаться не в конце, а в начале или середине документа), но по-хорошему, так делать нельзя.

самое простое - подвязать функцию с appendChild к событию window.onload. либо вызывать ее по нажатию пользователем на кнопку, например. т.е., главное - не во время загрузки страницы.
477
26 сентября 2007 года
Robinnovich
182 / / 02.12.2006
Спасибо попробую )
12
26 сентября 2007 года
alekciy
3.0K / / 13.12.2005
Как вариант если JS в коде страницы, то ставить его в самом конце страницы перед </bode>. Плюса 2: функции начнут выполнение когда страница уже загружена (хотя и не гарантируется), поисковые роботы не парсят код скрипта который все равно выполнить не могут.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог