Страница 1 из 1

Не успевают отображаться динамически созданные узлы

Добавлено: 19 дек 2006, 10:48
__Yuri__
Что-то я не фтыкаю что не так: нужно вывести список, а выводится только первый элемент, а затем заменяется на последний, в результате получается список из одного элемента со значением последнего ... Как будто браузер не успевает вслед за циклом создавать DOM иерархию...
Пробовал только в IE, так как в скрипте используется ActiveX....



В боди:
...
<ol id="list_files"></ol>

В скрипте:
...
var oU2; // Это указатель на список ol
var oLi = document.createElement("li");
var oA = document.createElement("a");
var oTxt = document.createTextNode("xxx");

function makeList() // запускается по onload
{
var oCurLi;
var oCurA;

oU2 = document.getElementById("list_files");
for(var i=0; i < iii; i++)
{
oCurLi = oU2.appendChild(oLi); // add Li
oTxt.nodeValue = dict.name;
oCurA=oCurLi.appendChild(oA); // add A
oCurA.appendChild(oTxt);
}
}

Re: Не успевают отображаться динамически созданные узлы

Добавлено: 19 дек 2006, 12:27
Oscar
  1. document.createElement нужно вызывать каждый раз, чтобы создавать новые обьекты, иначе действительно будут меняться значения старых
  2. appendChild я бы вызывал в обратном порядке (не знаю, насколько это существенно, но наверняка надёжнее), для того, чтобы при добавлении элемента li в тело документа, вся его внутренняя структура уже была готова и показывалась сразу (а не добавлялась в процессе видимости)
  3. a без аттрибута href не отображается браузерами
  4. код проверенный на FF, в Windows перегружаться лень
[syntax="javascript"]<html>
<head>
<title>list</title>
<script type="text/javascript">

var oU2; // Это указатель на список ol

function makeList() // запускается по onload
{
oU2 = document.getElementById("list_files");

for(var i=0; i < 10; i++) {

var oTxt = document.createTextNode("xxx");
var oA = document.createElement("a");
var oLi = document.createElement("li");


oTxt.nodeValue = i;//dict.name;

oA.setAttribute("href", oTxt.nodeValue);
oA.appendChild(oTxt);
oLi.appendChild(oA); // add A
oLi = oU2.appendChild(oLi); // add Li

}
}
</script>
<body onLoad="makeList()">
<ol id="list_files"></ol>
</body>
</html>[/syntax]

Re: Не успевают отображаться динамически созданные узлы

Добавлено: 19 дек 2006, 12:48
__Yuri__
Oscar,
спасибо!

А то я сдуру считал, что "абстрактный" узел тупо копируется, а сам остается в памяти (раз указатель на него живет), поэтому что бы не копить в памяти тысячи ненужных объектов так и потсупил, оказывается разработчики об этом сами позаботились...

Re: Не успевают отображаться динамически созданные узлы

Добавлено: 19 дек 2006, 12:54
Oscar
__Yuri__ писал(а):оказывается разработчики об этом сами позаботились...
как знать, как знать ...
ФФ почему-то жрёт минимум 50 Мб оперативки, а в "хорошие" времена может и за сотню уходить ...