我正在努力解决这个问题,我正在尝试构建一个具有多个级别的简单菜单树
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()每个()没有任何成功,它没有给我很好的破折号来指示我在哪个级别,它只是吐出文件夹名称。
我遍历的代码
$(data).find("FolderName").each(function(){
var folderName = $(this).text();
$("#folderLevels").append(folderName+"<br/>");
});
答案 0 :(得分: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
答案 1 :(得分:0)
我想你会想要使用递归函数。
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;
}