Цитата:
|
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, то он не будет работать)
Я думаю, что при вставки кода таким способом браузер рендерит строку, но не выделяет память на всякие "физические" операции, типо там выполнение скрипта или подгрузка стилей и т.д.