Показать сообщение отдельно
  #2 (permalink)  
Старый 18.07.2011, 06:39
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Цитата:
body.innerhtml = '<div>что-то там</div>' + body.innerhtml;
Свойство пишется так: innerHTML

Цитата:
1. Слетают все указатели, полученные прежде по getElementById. То есть происходит в реале ещё более странно: прежние объекты, на которые получен указатель, продолжают существовать и жить своей жизнью, но на экране они не видны, а вместо них появляются их двойники с теми же ИД.
Ну сам getElementById - это "мёртвая" ссылка, т.е. она указывает на определённый элемент и в случае его замены/удаления ссылка не обновляется (в отличии от getElements методов), а смена свойства innerHTML по сути является заменой, так что тут всё логично. А не удаляются эти указатели по той-же причине - они не привязаны к DOM напрямую.

Допустим у нас есть такой HTML код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Пример</title>
</head>

<body>
<h2 id="h2">Заголовок</h2>

</body>
</html>


И мы через JS делаем:
var h2 = document.getElementById("h2"),
h2byName = document.getElementsByTagName("h2"),
myBody = document.getElementsByTagName("body")[0];

myBody.innerHTML = myBody.innerHTML;
h2.innerHTML = "Пыщ Пыщ!"; // Упс! Кажется бага
h2byName[0].innerHTML = "Пыщ Пыщ!"; // Ура, всё ок!


Цитата:
2. Нарушается позиционирование элементов на странице. Т.е., например, top отсчитывается словно не от нуля, а со положительным смещением.
Тут я честно хз почему так)

Цитата:
3. Да и вообще страница словно заново перегружается (счетчики дважды обновляются). Я это ещё мог бы понять, если бы вообще все объекты, созданные после первой загрузки, напрочь удалялись при повторной загрузке. Однако это не так - см. п.1.
По сути - это и происходит. Почему не удаляются ссылки я писал выше.

Цитата:
4. Ну, и соответственно, обработчик onLoad глючит конкретно: выполнение его прерывается после выполнения строки "body.innerhtml = ...", но после повторной загрузки страницы он всё же второй раз не вызывается.
Тут тоже всё логично, т.к. вы сбросили всё содержимое body.

Цитата:
При таких глюках было бы правильнее, КМК, вообще изъять innerhtml у body. С другими тэгами таких глюков не заметил.
Вам повезло, innerHTML в разных браузерах может багать, например помнится в ИЕ были проблемы с тегом style и вставкой ячеек таблицы.

Вообще свойство innerHTML может часто вызывать недопонимание, например если вставить тег script через innerHTML, то он не будет работать)

Я думаю, что при вставки кода таким способом браузер рендерит строку, но не выделяет память на всякие "физические" операции, типо там выполнение скрипта или подгрузка стилей и т.д.
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 18.07.2011 в 07:11.
Ответить с цитированием