1

サイト コレクションがあります。これを行うには再帰ループが必要だと言われました。

これは私が試したことです:

サイトが読み込まれたら、 getSiteTree() を呼び出して、最上位の Web サイトを 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 :

ここに画像の説明を入力

4

1 に答える 1

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 オブジェクトを使用して行われます。他の方法で行うこともできますが、再帰したい場合は、同じ「クラス」の他のオブジェクトを含むオブジェクトを持つと役立ちます

于 2013-10-18T15:55:59.270 に答える