проблемы с рекурсивным построением UL / LI в jquery

#javascript #jquery

#javascript #jquery

Вопрос:

Я пытаюсь построить дерево элементов LI / UL из внутреннего объекта, который у меня есть в javascript. Создание элементов верхнего уровня работает нормально, но затем рекурсивное построение дочерних элементов, похоже, вызывает у меня проблемы.

в приведенном ниже коде #DynaTree находится UL элемент, который является корнем моего дерева. tv это мой объект, который представляет дерево — на самом деле я заменил дочерний код создания чем-то более простым, просто чтобы заставить его работать. Вы также можете увидеть закомментированную строку, где я попробовал другой подход. В любом случае я не получаю ошибок, но я никогда не вижу дочерних элементов, добавленных к первому уровню объектов.

      for(i = 0; i < tv.getSize();i  ){
        var t = tv.getTaskAt(i);
         var newul = $("<ul>"   t.TaskName    "("   t.GUID   ")</ul>");
         makeChildren(newul);
         $("#DynaTree").append(newul);
     }

     function makeChildren(el){
         var randomnumber=Math.floor(Math.random()*11);
         console.log("Making Children Elements "   randomnumber);
         for(var i = 0; i < randomnumber;i  ){
             var newElement = $("<ul>New Element</ul");
                             /************************
                              Neither one of these methods works!
                             ***********************/
             //$("#DynaTree", el).append(newElement);
             el.append(newElement);
         }

    }
  

`

Такое чувство, что я упускаю что-то очевидное. Любая помощь очень ценится.

-ace

Комментарии:

1. ul Не закрыт в makeChildren, может быть, в этом проблема?

2. Теперь я чувствую себя очень глупо. Спасибо, что указали на это

3. @Andrew прав, вам не хватает закрывающей скобки в вашем </ul> теге, создающем дочерний элемент. Это приводит к созданию <ul> узла без содержимого. Кстати, опубликованный вами код не содержит в себе рекурсии . Рекурсия включает в себя функцию, которая вызывает саму себя.

Ответ №1:

Спасибо Эндрю, указавшему, что ссылка UL не была закрыта

Ответ №2:

Вам не хватает закрытия > в конце создания нового элемента, следует прочитать…

 `var newElement = $("<ul>New Element</ul>");`
  

Ответ №3:

Если я правильно понимаю, вы пытаетесь создать эти ul / li во время выполнения. Вы можете использовать плагин шаблона jquery для того же самого. Больше информации на http://api.jquery.com/jQuery.template /