【问题标题】:jquery ajax response, traverse XML to build nested menu treejquery ajax响应,遍历xml构建嵌套菜单树
【发布时间】:2012-05-23 02:50:23
【问题描述】:

想弄清楚这一点我快疯了,我正在尝试构建一个具有多级的简单菜单树

RootFolder
- First Sub Folder
-- First Sub Sub Folder
--- First Sub Sub Sub Folder
--- First Sub Sub Sub Sub Folder
- Second Sub Folder
- Second Sub Sub Folder

我的 XML 非常简单(不是正确的值)

<OrgFolderDetails>
    <FolderName>Main Folder</FolderName>
    <TheChildren>
        <OrgFolderDetails>
            <FolderName>First Sub Folder</FolderName>
            <TheChildren>
                <OrgFolderDetails>
                    <FolderName>First Sub Sub Folder</FolderName>
                    <TheChildren>
                        <OrgFolderDetails>
                            <FolderName>First Sub Siub Sub Folder</FolderName>
                            <TheChildren>
                                <OrgFolderDetails>
                                    <FolderName>First Sub Sub Sub Sub Folder</FolderName>
                                    <TheChildren/>
                                </OrgFolderDetails>
                            </TheChildren>
                        </OrgFolderDetails>
                    </TheChildren>
                </OrgFolderDetails>
            </TheChildren>
        </OrgFolderDetails>
        <OrgFolderDetails>
            <FolderName>Second Sub Folder</FolderName>
            <TheChildren>
                <OrgFolderDetails>
                    <FolderName>Second Sub Sub Folder</FolderName>
                    <TheChildren/>
                </OrgFolderDetails>
            </TheChildren>
        </OrgFolderDetails>
    </TheChildren>
</OrgFolderDetails>

我使用了 jQuery 的 .filter() 和。 find() each() 没有任何成功,它没有给我漂亮的破折号来指示我在哪个级别,它只是吐出文件夹名称。

我的遍历代码

 $(data).find("FolderName").each(function(){
             var folderName = $(this).text();

            $("#folderLevels").append(folderName+"<br/>");
         });

【问题讨论】:

  • 你也可以发布你的jQuery吗?
  • ahren,谢谢,我忘了添加我的初始 sn-p。我的概念/方法是尝试定位位置并计算嵌套位置并添加破折号数......那里没有成功。

标签: jquery xml ajax filter traversal


【解决方案1】:

好的,据我了解,我们需要构建一个菜单,前面有一定数量的破折号,具体取决于孩子的水平。 幸运的是,jQuery 让这一切变得简单。

$(data).find("FolderName").each(function(){ 
    var levels = $(this).parents("OrgFolderDetails").size();
    var text = $(this).text();
    var html = "";

    for(var j=0; j < levels; j++){
        html += "-";    
    }
    html += " "+text+"</br>"; //add in that space after the dashes, and the <br>

    $("#folderLevels").append(html);
});

希望对您有所帮助。其中的主要助手是parents() 方法。 http://api.jquery.com/parents

【讨论】:

  • 天啊,你是认真的吗...我看到你的方法,效果很好,非常感谢...你的代码教会了我很多东西,非常感谢!
【解决方案2】:

我想你会想要为此使用递归函数。

var s = getNestedString($(data), 0);

function getNestedString(d, level) {
    // get the name of current node
    var s = d.children("FolderName").text() + "<br/>";

    // prepend with dashes for inner levels
    for (var i=0 ; i<level ; i++) {
        s = "-" + s;
    }

    // get children and call this function recursively (incrementing level)
    var ch = d.children("TheChildren").children("OrgFolderDetails");
    for (var i=0 ; i < ch.length ; i++) {
        s = s + getNestedString(ch[i], level+1);
    }

    // return string for current and nested nodes
    return s;
}

【讨论】:

  • 我也会检查一下,感谢您的快速响应,我正在扯掉我的头发!
  • @GuMingPeng 我不认为我的实际工作,加上ahren 的答案更好(更简单)。我认为您可以使用 children,因为它存在于 JQuery 中,但显然不是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-11-24
  • 2011-04-10
相关资源
最近更新 更多