【问题标题】:Append <ul> and <li> in recursive loop在递归循环中追加 <ul> 和 <li>
【发布时间】:2023-03-28 19:10:02
【问题描述】:

我有一个网站集。有人告诉我我需要一个递归循环来做到这一点。

这是我尝试过的:

当网站加载时,调用 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>

我有这个初始 html:

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

这是我能得到的输出,也是我想要完成的。希望这能让事情变得更清楚http://i.imgur.com/D5eHeHe.png

【问题讨论】:

  • 您考虑过使用 XSLT 吗?
  • 这里有很多未定义的术语(子网站?)如果您向我们展示需要解析的返回内容,我可以告诉您如何执行此操作。
  • 无论如何你可以把它作为一个 json 对象取回吗? FTW,您可能需要考虑使用 AngularJS 或 Knockout,它们可以将 JSON 数据绑定到此类结构。
  • 我不熟悉 XSLT。我计划将
    • 标记转换为从一个位置对我的整个站点进行可展开/可折叠的导航。这就是我使用 HTML 和 JS 的原因
  • 查看SPServices文档,可以使用$().SPServices.SPXmlToJson检索JSON

标签: javascript jquery html sharepoint recursion


【解决方案1】:

假设你有一个嵌套对象,你会想做这样的事情:

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 对象。你可以用其他方式来做,但如果你想递归它,拥有一个包含相同“类”的其他对象的对象会有所帮助

【讨论】:

  • 我在看你的例子,但我没有你的 $input 变量。
  • 通过 SharePoint,您可以获得网站集(SPSite 类),使用作为 Web 的 RootWeb 属性。 Web 有一个 Webs 属性,它获取子网站。将 RootWeb 作为初始变量发送,然后将 .Webs 属性作为递归调用发送。
猜你喜欢
  • 1970-01-01
  • 2016-06-14
  • 2013-06-20
  • 2015-05-14
  • 2014-09-01
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多