Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 附加<;ul>;及<;李>;在递归循环中_Javascript_Jquery_Html_Sharepoint_Recursion - Fatal编程技术网

Javascript 附加<;ul>;及<;李>;在递归循环中

Javascript 附加<;ul>;及<;李>;在递归循环中,javascript,jquery,html,sharepoint,recursion,Javascript,Jquery,Html,Sharepoint,Recursion,我有一个网站集。我被告知需要一个递归循环来完成这项工作 这就是我尝试过的: 加载站点时,调用getSiteTree(),它将顶级网站传递给my getSubSite()函数。从那里我检查是否有任何子网站。我有一个布尔值,但我还没有真正把它用在任何事情上,我以前见过它被用于这种类型的工作。无论如何,从那里我检查是否有子站点,如果没有,我记录分支的末尾,如果有,我使用新的url再次调用函数并重复该过程。看看我的控制台,它似乎按预期工作 function getSiteTree(){ var tr

我有一个网站集。我被告知需要一个递归循环来完成这项工作

这就是我尝试过的:

加载站点时,调用getSiteTree(),它将顶级网站传递给my 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>
  • 站点1
    • 第1.1分节
    • 第1.2分段
    • 第1.3分段
      • 1.3.1
    • 第1.4分段
    • 分1.5
  • 站点2
    • 次级2.1
    • 次级2.2
    • 次级2.3
      • 2.3.1
      • 2.3.2
  • 我有一个初始html:

          <div id="treeviewDiv" style="width:200px;height:150px;overflow:scroll">
            <ui id="treeviewList"></ui>
          </div>
    
    
    
    这是我能得到的输出和我正在努力实现的目标。希望这能让事情澄清一点:


    假设您有一个嵌套对象,您可能希望执行以下操作:

    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);
        });
    }
    
    函数构建树($element,$object){
    var$ul=$(“
      ”); var$li; $object.forEach(函数(项){ $li=$(“
    • ”+item.Name+”
    • ); $ul.附加($li); 如果(item.SubCategories.length>0){ 构建树($ul,项目子类别); } $element.append($ul); }); }
      这是一把小提琴:


      对于SharePoint,您将发送网站集的根网站,而不是子类别,您将发送item.webs属性。当然,所有这些都是使用javascript或jquery对象实现的。您可以通过其他方式执行此操作,但如果您希望递归它,则有一个包含同一“类”的其他对象的对象会有所帮助。

      如果您有一个嵌套对象,您可能需要执行以下操作:

      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);
          });
      }
      
      函数构建树($element,$object){
      var$ul=$(“
        ”); var$li; $object.forEach(函数(项){ $li=$(“
      • ”+item.Name+”
      • ); $ul.附加($li); 如果(item.SubCategories.length>0){ 构建树($ul,项目子类别); } $element.append($ul); }); }
        这是一把小提琴:


        对于SharePoint,您将发送网站集的根网站,而不是子类别,您将发送item.webs属性。当然,所有这些都是使用javascript或jquery对象实现的。您可以用其他方法来实现,但是如果您想递归它,那么有一个包含相同“类”的其他对象的对象会有所帮助。

        您考虑过使用XSLT吗?这里有很多未定义的术语(子站点?)如果您向我们展示需要解析的返回内容,我可以告诉您如何执行此操作。您是否可以将其作为json对象返回?FTW,您可能需要考虑使用anguljs或KokOutt,它可以将JSON数据绑定到这样的结构。我不熟悉XSLT。我计划将
        • 标签从一个位置变成我整个站点的可扩展/可折叠导航。这就是为什么我要使用HTML和JS查看SPServices文档,您可以使用XSLT检索JSON吗?这里有很多未定义的术语(子网站?),如果您向我们展示需要解析的返回内容,我可以告诉您如何执行此操作。您是否可以将其作为JSON对象返回?FTW,您可能需要考虑使用anguljs或KokOutt,它可以将JSON数据绑定到这样的结构。我不熟悉XSLT。我计划将
          • 标签从一个位置变成我整个站点的可扩展/可折叠导航。这就是为什么我要使用HTML和JS查看SPServices文档,您可以通过我查看您的示例来检索JSON,但我没有类似于$input变量的内容。使用SharePoint,您可以获得网站集(SPSite类),使用RootWeb属性,它是一个web。Web有一个Webs属性,该属性获取子Web。将RootWeb作为初始变量发送,然后将.Webs属性作为递归调用发送。我正在查看您的示例,但我没有类似于$input变量的任何内容。使用SharePoint可以获取网站集(SPSite类),使用RootWeb属性,它是一个web。Web有一个Webs属性,该属性获取子Web。将RootWeb作为初始变量发送,然后将.Webs属性作为递归调用发送。