Добавить <ul> и <li> в рекурсивный цикл

0

У меня есть коллекция сайтов. Мне сказали, что для этого мне нужен рекурсивный цикл.

Это то, что я пробовал:

Когда сайт загружается, вызовите getSiteTree(), который передает веб-сайт верхнего уровня моей функции getSubSite(). Оттуда я проверю, есть ли какие-либо подсайты. У меня есть логическое значение, но я пока не использую его для чего-либо еще, я только что видел его раньше для этого типа работы. В любом случае, оттуда я проверю, есть ли какие-либо подсистемы, если нет, я регистрирую конец ветки, если есть, я вызываю функцию снова с использованием нового URL-адреса и повторяю процесс. Глядя на мою консоль, она работает по назначению.

function getSiteTree(){
  var tree = $('#treeviewList');
  var rootsite = window.location.protocol + "//" + window.location.hostname;
  var siteEnd = false;

  getSubSite(rootsite);  
}

function getSubSite(url){
    $().SPServices({
    operation: "GetWebCollection",
    webURL: url,
    async: true,
    completefunc: function(xData, Status) {
        var siteUrl; 
        var siteCount = $(xData.responseXML).find("Web").length;

        if(siteCount == 0){
            console.log("end of branch");
            siteEnd = true;
        }else{
            $(xData.responseXML).find("Web").each(function() {
                siteUrl = $(this).attr("Url");
                console.log(siteUrl);
                getSubSite(siteUrl);
            });
      }
    }
    });
}

Мои вопросы: теперь, когда у меня есть мои сайты, мне нужно взять эти сайты и создать что-то подобное, но я не уверен, как это сделать.

    <li>Site 1
        <ul>
            <li>sub 1.1</li>
            <li>sub 1.2</li>
            <li>sub 1.3</li>
                <ul>
                    <li>1.3.1</li>
                </ul>
            <li>sub 1.4</li>
            <li>sub 1.5</li>
        </ul>
    </li>
    <li>Site 2
        <ul>
            <li>sub 2.1</li>
            <li>sub 2.2</li>
            <li>sub 2.3</li>
                <ul>
                    <li>2.3.1</li>
                    <li>2.3.2</li>
                </ul>
        </ul>
    </li>
</ul>

У меня есть этот inital html:

      <div id="treeviewDiv" style="width:200px;height:150px;overflow:scroll">
        <ui id="treeviewList"></ui>
      </div>

Это результат, который я могу получить, и то, что я пытаюсь выполнить. Надеюсь, это немного очистит http://i.imgur.com/D5eHeHe.png:

Изображение 174551

  • 1
    Вы рассматривали возможность использования XSLT?
  • 0
    Здесь много неопределенных терминов (подсайтов?). Я могу рассказать вам, как это сделать, если вы покажете нам, что возвращается, и что нужно проанализировать.
Показать ещё 16 комментариев
Теги:
recursion
sharepoint

1 ответ

0

Вы хотите сделать что-то вроде этого, если у вас есть вложенный объект:

function buildTree($element, $object) {
    var $ul = $('<ul></ul>');
    var $li;
    $object.forEach(function (item) {
        $li = $('<li>' + item.Name + '</li>');
        $ul.append($li);
        if (item.SubCategories.length > 0) {
            buildTree($ul, item.SubCategories);
        }
        $element.append($ul);
    });
}

здесь скрипка: http://jsfiddle.net/snowburnt/uJbE8/1/

Для SharePoint вы отправляете RootWeb семейства сайтов, а вместо подкатегорий вы отправляете свойство item.webs. Все это, используя javascript или jquery-объект, конечно. Вы могли бы сделать это по-другому, но если вы хотите его перезаписать, это помогает иметь объект, содержащий другие объекты одного и того же класса,

  • 0
    Я смотрю на ваш пример, но у меня нет ничего похожего на вашу переменную $ input.
  • 0
    С SharePoint вы получаете семейство сайтов (класс SPSite), используйте свойство RootWeb, которое является веб-сайтом. Web имеет свойство Webs, которое получает вложенные сети. Отправьте RootWeb в качестве исходной переменной, а затем отправьте свойство .Webs как рекурсивный вызов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню