Вход

Просмотр полной версии : динамическое меню и childNodes


Keenan
06.10.2007, 15:22
k=docs.childNodes.length

for(i=0;i<k;i++){
attachMovie("yearunit","q"+i,i)
this["q"+i]._x=0
this["q"+i]._y=this["q"+(i-1)]._height+this["q"+(i-1)]._y

l=docs.childNodes[i].childNodes.length
...

}

Вкратце про код: составляю вертикальное динамическое меню с разделами и подразделами. Приведен код, который выставляет на сцену мувик "yearunit" (раздел меню) столько раз, сколько прописано в xml, понятно, что количество раз расчитывается при помощи childNodes.length. Но в каждом разделе меню есть определенное количество своих подразделов (тоже прописывается в xml, естественно). Собственно, вопрос: как мне рассчитать количество подразделов при помощи того же childNodes.length, если количество разделов тоже рассчитывается? проблема, как мне кажется, именно в прописывании переменной i (количества разделов) здесь l=docs.childNodes[i].childNodes.length. Если, например, я ставлю просто 0 вместо i, то есть первый чайлд, то все работает, но только с первым разделом, а мне необходимо сделать то же самое со всеми разделами.

Пожалуйста, помогите...

udaaff
06.10.2007, 17:32
XML-дерево нужно обходить рекурсивной функцией.

Вот тебе пример. Класс практически без описания, разбирешься я думаю.17860

Keenan
06.10.2007, 18:00
спасибо, поковыряюсь в классе...
я так понял, просто здесь не получится загнать это дело в цикл?

Mnilionic
06.10.2007, 18:10
можно,
если цикл положить в функцию, которая в качестве параметра будет принимать узел документа

в этом цикле, каждый нод проверять на дочерние
если есть запускать снова функцию с текущем узлом

так же придусмотреть параметр "вложенности", который будет либо отступы задавать вложенным элементам либо что-нить ещё на вешу усмотрение

Keenan
06.10.2007, 19:08
спасибо, как вариант попробую...
параметры вложенности уже придуманы) просто из кода стер, тк не в тему они вопросу)

udaaff
06.10.2007, 19:35
А что за параметр "вложенности"? Зачем он нужен?

Mnilionic
06.10.2007, 19:56
udaff, чтоб отсчитывать отступы/цвета/прочее :)

var str = "<i>";
str +="<i name='1'/>";
str +="<i name='2'>";
str +=" <i name='а'/>";
str +=" <i name='б'>";
str +=" <i name='I'/>";
str +=" <i name='II'/>";
str +=" </i>";
str +=" <i name='ц'/>";
str +="</i>";
str +="<i name='3'/>";
str +="</i>";


var doc:XML = new XML();
doc.ignoreWhite = true;
doc.parseXML(str);



function dd(node:XML, level:Number){
var children = node.childNodes;

for(var i=0; i<children.length; i++){
var child = children[i];
// здесь обрабатываем данные узла
var padding = "";
for(var j=0; j<level; j++) padding +="-";
trace(padding + child.attributes["name"])
//
if(child.firstChild.hasChildNodes) dd(child, level+1);
}
}
var node = doc.firstChild;
dd(node, 0)