jQuery递归遍历JSON树,生成对应的ul-li组合,形成树形菜单

合集下载

递归生成树形菜单

递归生成树形菜单

递归⽣成树形菜单递归⽣成树 //调⽤的⽅法 public ActionResult TreeView(){List<TreeModel> ltm = this.GetTrees();string tree = JsonConvert.SerializeObject(ltm).ToString();return Content(tree);}public List<TreeModel> GetTrees(){List<ModuleEntity> listQuery = map.GetList().ToList<ModuleEntity>();List<ModuleEntity> me = listQuery.Where(t => t.F_ParentId == "0").ToList<ModuleEntity>();if (me==null){return null;}List<ModuleEntity> Lme = me.ToList<ModuleEntity>();List<TreeModel> tm = new List<TreeModel>();foreach (ModuleEntity item in Lme){TreeModel tms = new TreeModel();tms.id = item.F_Id; = item.F_FullName;tms.parentId = item.F_ParentId;tms.spread = "true";List<TreeModel> child = new List<TreeModel>();GetTree(listQuery, child, item.F_Id);tms.children = child;tm.Add(tms);}return tm;}//递归获取数据public void GetTree(List<ModuleEntity> list,List<TreeModel> listTree,string parentId){foreach (ModuleEntity item in list){if (item.F_ParentId==parentId){TreeModel tm = new TreeModel();tm.id=item.F_Id;tm.parentId = item.F_ParentId; = item.F_FullName;tm.spread = "true";tm.children = new List<TreeModel>();listTree.Add(tm);GetTree(list,tm.children,tm.id);}}}树形菜单类public class TreeModel{public string id { get; set; }public string parentId { get; set; }public string name { get; set; }public string spread { get; set; }public string href { get; set; }public List<TreeModel> children { get; set; } }。

树形菜单-递归实现逻辑

树形菜单-递归实现逻辑

树形菜单-递归实现逻辑全文共四篇示例,供读者参考第一篇示例:树形菜单是一种常见的界面设计元素,通过树形结构展示信息,使用户能够轻松浏览和选择。

在Web开发中,树形菜单通常用于显示网站的导航菜单、项目结构、文件夹结构等。

实现树形菜单的方法有多种,其中递归是一种常用且有效的实现逻辑。

在本文中,我们将介绍树形菜单的递归实现逻辑,并通过示例代码演示如何使用递归来构建一个动态的树形菜单。

一、什么是递归?在程序设计中,递归是一种解决问题的方法,通过将问题分解成规模较小的子问题来解决整体问题。

递归函数会反复调用自身,直到满足某个终止条件才停止递归。

递归在数据结构和算法中有着广泛的应用,如树形结构的遍历、图的搜索等。

二、树形菜单的数据结构在实现树形菜单之前,首先要明确树形结构的数据表示方法。

通常树形菜单的数据结构可以用对象或数组来表示,每个节点包含一些基本信息和子节点信息。

一个简单的树形菜单数据结构如下所示:```javascript{id: 1,name: 'Root',children: [{ id: 2, name: 'Node 1', children: [] },{ id: 3, name: 'Node 2', children: [{ id: 4, name: 'Node 2-1', children: [] },{ id: 5, name: 'Node 2-2', children: [] }] },{ id: 6, name: 'Node 3', children: [] },]}```在上面的示例中,树形菜单包含了一个根节点和三个子节点,每个节点都包含了id、name和children属性,其中children是一个数组,用于存储子节点信息。

三、递归构建树形菜单接下来,我们将演示如何使用递归来构建一个树形菜单。

[应用]Jquery动态生成树形列表

[应用]Jquery动态生成树形列表

Jquery动态生成树形列表实现思路:使用ajax方式发送请求→服务端从数据库中取出结构列表,生成xml文档,回发给客户端→客户端接收到xml数据,进行解析,生成列表,并配置列表样式。

客户端代码:function GetTreeView(odiv) {//odiv为要加载树形控件的div$.ajax({async: false,type: "GET",url: "../Page_Ajax/RS_TreeView.aspx",dataType: "xml",success: function(xmldata) {//新建列表项var ou = $("<ul></ul>").appendTo(odiv);//*//获取factory节点var f = $(xmldata).find("Factory:first");var lfactory = $("<li></li>").appendTo(ou);var dfactory = $("<div></div>").appendTo(lfactory);var ifactory = $("<img src=''/>").appendTo(dfactory);var ifactory2 = $("<img src=''/>").appendTo(dfactory);var sfactory = $("<span></span>").appendTo(dfactory);//设置节点属性$(sfactory).attr("id", $(f).attr("id"));$(sfactory).text($(f).attr("name"));$(dfactory).width($(sfactory).text().length * 15 + 35);//根据数据长度计算div宽度$(sfactory).bind("click", function() {//绑定点击事件});var ufactory = $("<ul></ul>").appendTo(lfactory);//遍历Area节点$(f).find("Area").each(function() {var larea = $("<li></li>").appendTo(ufactory);var darea = $("<div></div>").appendTo(larea);var iarea = $("<img src=''/>").appendTo(darea);var iarea2 = $("<img src=''/>").appendTo(darea);var sarea = $("<span></span>").appendTo(darea);$(sarea).attr("id", $(this).attr("id"));$(sarea).text($(this).attr("name"));$(darea).width($(sarea).text().length * 15 + 35);$(sarea).bind("click", function() {});var uarea = $("<ul></ul>").appendTo(larea);//遍历Team节点$(this).find("Team").each(function() {var lteam = $("<li></li>").appendTo(uarea);var dteam = $("<div></div>").appendTo(lteam);var iteam = $("<img src=''/>").appendTo(dteam);var iteam2 = $("<img src=''/>").appendTo(dteam);var steam = $("<span></span>").appendTo(dteam);$(steam).attr("id", $(this).attr("id"));$(steam).text($(this).attr("name"));$(dteam).width($(steam).text().length * 15 + 35);//绑定单击事件$(steam).bind("click", function() {});var uteam = $("<ul></ul>").appendTo(lteam);//遍历Well节点$(this).find("Well").each(function() {var lwell = $("<li></li>").appendTo(uteam);var dwell = $("<div></div>").appendTo(lwell);var iwell = $("<imgsrc='../Img/treeico/37.png'/>").appendTo(dwell);var swell = $("<span></span>").appendTo(dwell); $(swell).attr("id", $(this).attr("id"));$(swell).text($(this).attr("name"));$(dwell).width($(swell).text().length * 15 + 35);$(swell).bind("click", function() {});});});});//设置样式ou.css("padding-left", "15px");ou.css("margin", "0px");ou.css("margin-top", "3px");var ul = $(ou).find("ul");var li = $(ou).find("li");ul.css("padding-left", "20px");ul.css("padding-top", "5px");ul.css("margin-left", "0px");li.css("margin-left", "0px");li.css("list-style-type", "none");li.css("cursor", "pointer");ou.find("li:has(ul)").find("span").css("font-family", "微软雅黑").css("font-size", "14px");ou.find("li:has(ul)").find("span").hover(function() {$(this).css("color", "#0000ff").css('text-decoration', 'underline');},function() {$(this).css("background-color", "#ffffff").css("color","#000000").css('text-decoration', 'none');});//默认各节点展开,设置图片ou.find("li:has(ul)").find("div img:first").attr("src","../Img/treeico/minus.gif").css('');ou.find("li:has(ul)").find("div img:nth-child(2)").attr("src","../Img/treeico/Open.png");//设置展开收缩事件li.find("ul").prev().find('img').click(function() {$(this).parent().next().toggle();if ($(this).attr("src") == "../Img/treeico/minus.gif") {$(this).attr("src", "../Img/treeico/plus.gif");$(this).next().attr("src", "../Img/treeico/folder.png");}else if ($(this).attr("src") == "../Img/treeico/plus.gif") {$(this).attr("src", "../Img/treeico/minus.gif");$(this).next().attr("src", "../Img/treeico/Open.png");}else if ($(this).attr("src") == "../Img/treeico/Open.png") { $(this).prev().attr("src", "../Img/treeico/plus.gif");$(this).attr("src", "../Img/treeico/folder.png");}else if ($(this).attr("src") == "../Img/treeico/folder.png") { $(this).prev().attr("src", "../Img/treeico/minus.gif");$(this).attr("src", "../Img/treeico/Open.png");}});}});}服务器端代码(RS_TreeView.aspx):protected void Page_Load(object sender, EventArgs e){XmlDocument xmlDoc = new XmlDocument();XmlElement eRoot = xmlDoc.CreateElement("Factory");eRoot.SetAttribute("id", "factory");eRoot.SetAttribute("name", "采油厂");xmlDoc.AppendChild(eRoot);Factory f = new Factory();f.GetAreaList();foreach (Area a in f.AreaList){XmlElement eArea = xmlDoc.CreateElement("Area");eArea.SetAttribute("id", a.ID);eArea.SetAttribute("name", );eRoot.AppendChild(eArea);a.GetTeamList();foreach (Team t in a.TeamList){XmlElement eTeam = xmlDoc.CreateElement("Team");eTeam.SetAttribute("id", t.ID);eTeam.SetAttribute("name", );eArea.AppendChild(eTeam);t.GetWellList();foreach (Node w in t.WellList){XmlElement eWell = xmlDoc.CreateElement("Well");eWell.SetAttribute("id",w.ID.ToString());eWell.SetAttribute("name",);eTeam.AppendChild(eWell);}}}ResponseXML(xmlDoc.OuterXml);}private void ResponseXML(string xml){Response.ContentType = "text/xml";Response.Charset = "utf-8";Response.Clear();Response.Write("<?xml version=\"1.0\" encoding=\"utf-8\"?>");Response.Write(xml);Response.End();}其中:Factory等是自定义的类,GetAreaList等方法是类中自定义的方法,生成xml文档的代码,可以自行编写。

jQuery树形菜单

jQuery树形菜单

jQuery树形菜单(1)jquery.treeview/fylsh/blog/item/af6ef8dd16056cadcd116602.htmljQuery的树形插件资料URL:http://bassistance.de/jquery-plugins/jquery-plugin-treeview/ 从该网站Download得到jquery.treeview.zip文件,里面有需要js、css、images等文件以及Demo,使用时只要在页面中引入jquery.js、jquery.cookie.js、jquery.treeview.js(树形菜单的方法)、jquery.treeview.css即可。

同时保证jquery.treeview.css文件和images文件夹的相对位置,在同一目录下即可接下来构建树形菜单的内容如下:<ul id="example1" class="treeview-black"><li><span>Folder 1</span><ul><li><span >Item 1</span></li></ul></li><li><span >Folder 2</span><ul><li><span >Subfolder 2.1</span><ul id="subfolderadd"><li><span >File 2.1.1</span></li><li><span >File 2.1.2</span></li></ul></li><li><span >File 2.2</span></li></ul></li><li class="closed"><span >Folder 3(closed at start)</span><ul><li><span >File 3.1</span></li></ul></li><li><span >File 4</span></li></ul><div id="treecontrol"><a href="#">收起</a><a href="#">展开</a><a href="#">收起/展开</a></div>最外面的结点作为外结点,每一个<ul></ul>表示一个结点,结点中可以添加很多项,项都是以<li></li>来说明项里面的内容可以是随意的,比如上面用<span></span>来表示结点的内容,你可以用<a>等,当项的内容后面紧接着添加<ul></ul>后,那么该项就变成了父结点,<ul><li>之间不能有html代码,<li>中不能有<li>元素,否则不会显示。

jQuery递归遍历JSON树,生成对应的ul-li组合,形成树形菜单

jQuery递归遍历JSON树,生成对应的ul-li组合,形成树形菜单

jQuery递归遍历JSON树,⽣成对应的ul-li组合,形成树形菜单有如下JSON树形菜单数据,需要将其转换为对应的<ul><li>组合View Code1var menulist = {2 "menulist": [3 { "MID": "M001", "MName": "⾸页", "Url": "#", "menulist": "" },4 { "MID": "M002", "MName": "车辆买卖", "Url": "#", "menulist":5 [6 { "MID": "M003", "MName": "新车", "Url": "#", "menulist":7 [8 { "MID": "M006", "MName": "奥迪", "Url": "#", "menulist": "" },9 { "MID": "M007", "MName": "别克", "Url": "#", "menulist": "" }10 ]11 },12 { "MID": "M004", "MName": "⼆⼿车", "Url": "#", "menulist": "" },13 { "MID": "M005", "MName": "改装车", "Url": "#", "menulist": "" }14 ]15 },16 { "MID": "M006", "MName": "宠物", "Url": "#", "menulist": "" }17 ]18 };可使⽤如下⽅法递归得到View Code1 $(function () {2 $("#btn_bianli").click(function () {3var showlist = $("<ul></ul>");4 showall(menulist.menulist, showlist);5 $("#div_menu").append(showlist);6 });7 });89//menu_list为json数据10//parent为要组合成html的容器11function showall(menu_list, parent) {12for (var menu in menu_list) {13//如果有⼦节点,则遍历该⼦节点14if (menu_list[menu].menulist.length > 0) {15//创建⼀个⼦节点li16var li = $("<li></li>");17//将li的⽂本设置好,并马上添加⼀个空⽩的ul⼦节点,并且将这个li添加到⽗亲节点中18 $(li).append(menu_list[menu].MName).append("<ul></ul>").appendTo(parent);19//将空⽩的ul作为下⼀个递归遍历的⽗亲节点传⼊20 showall(menu_list[menu].menulist, $(li).children().eq(0));21 }22//如果该节点没有⼦节点,则直接将该节点li以及⽂本创建好直接添加到⽗亲节点中23else {24 $("<li></li>").append(menu_list[menu].MName).appendTo(parent);25 }26 }27 }稍微加上⼀点CSS就能形成⽆极菜单了,样式的东西下次再贴。

jQuery实现多级列表(树形菜单)

jQuery实现多级列表(树形菜单)

jQuery实现多级列表(树形菜单)<style>ul{list-style:none;margin:0px;padding:0px;}ul li{margin-left:15px;}ul li a{display:block;height:30px;width:80px;line-height:30px;text-decoration:none;padding-left:15px;}.no{display:none;}.yes{display:block;}.page{background:url("../img/page.png") no-repeat left center;}.plus{background:url("../img/plus.png") no-repeat left center;}.minus{background:url("../img/minus.png") no-repeat left center;}</style><script type="text/javascript" src="../jq/jquery-1.12.4.js"></script><script>$(function(){$("li").each(function(){if($(this).children("ul").size()>0)//判断li下是否有ul列表{//如果有隐藏ul,添加样式$(this).children("ul").eq(0).css("display","none");$(this).children("a").first().addClass("plus");//点击⼀级列表$("a").click(function(){//判断ul是否隐藏if($(this).parent().children("ul").first().css("display")=="none"){$(this).parent().children("ul").first().css("display","block");$(this).removeClass();$(this).addClass("minus");}else{$(this).parent().children("ul").first().css("display","none");$(this).removeClass();$(this).addClass("plus");}})}else{$(this).children("a").eq(0).addClass("page");}})})</script></head><body><ul><li><a href="#">⼀级菜单1</a><ul><li><a href="#">⼀级菜单1</a><ul><li><a href="#">⼀级菜单1</a></li> <li><a href="#">⼀级菜单1</a></li> </ul></li><li><a href="#">⼀级菜单1</a></li> </ul></li><li><a href="#">⼀级菜单1</a><ul><li><a href="#">⼀级菜单1</a></li> <li><a href="#">⼀级菜单1</a></li> </ul></li></ul></body></html>。

C#递归算法-遍历XML文件,以UL列表显示树形结构目录

C#递归算法-遍历XML文件,以UL列表显示树形结构目录

C#递归算法-遍历XML⽂件,以UL列表显⽰树形结构⽬录最近,公司有个新项⽬-⽤WEB做⼀个财报阅读器供客户使⽤。

项⽬经理⽤Gmail给组员下发需求⽂档,我⼀看,功能需求很详细,但UI设计却只有⽀⾔⽚语。

于是我回复询问下UI需求,得到的回复是:UI设计要看起来⼤⽅,美观,不能和⼀般的阅读器那样古板枯燥,在不改变客户的阅读习惯下,提⾼整体的⽤户体验等之类的话。

这让我想起了之前看到的⼀个QQ表情:这样的UI需求,想必⼤家应该遇到过吧。

话题扯远了,⾔归正题。

阅读器主要的设计是,⽂章⽬录和内容之间的交互。

⽬录是⽐较有层次感的,所以想到了⽤递归来动态⽣成⽬录。

⽬录可以⽤⼀个XML⽂件来保存:<?xml version="1.0" encoding="utf-8" ?><section value="审计报告及合并财务报表"><chapter value="审计报告及合并财务报表B0001A"></chapter><chapter value="审计报告B0101A"></chapter><chapter value="财务报表B0102A"><node value="(⼀)合并资产负债表B0201C"></node><node value="(⼆)资产负债表B0202C"></node><node value="(四)利润表B0204C"></node><node value="(五)合并现⾦流量B0205C"></node><node value="(六)现⾦流量表B0206C"></node><node value="(七)合并所有者权益变动表B0207C"></node><node value="(⼋)所有者权益变动表B0208C"></node></chapter><chapter value="财务报表附注B0103A"><node value="⼀、公司基本情况B0201C"></node><node value="⼆、公司主要会计政策、会计估计和前期差错更正B0202A"><knobble value="(⼀)财务报表的编制基础B0301C"></knobble><knobble value="(⼆)遵循企业会计准则的声明B0302C"></knobble><knobble value="(三)财务报告的批准报出B0303C"></knobble><knobble value="(四)会计期间B0304C"></knobble><knobble value="(五)记账本位币 B0305C"></knobble><knobble value="(六)同⼀控制下和⾮同⼀控制下企业合并的会计处理⽅法B0306A"></knobble><knobble value="(七)合并财务报表的编制⽅法B0307A"></knobble><knobble value="(⼋)现⾦及现⾦等价物的确定标准B0308C"></knobble><knobble value="(九)外币业务和外币报表折算B0309A"></knobble> </node> </chapter></section>然后在后台⽤递归读取XML结点,⽣成HTML显⽰到页⾯即可,实现如下:protected void Page_Load(object sender, EventArgs e){//XDocument doc = XDocument.Load(Server.MapPath("html5Reader/ReaderData.xml"));StringBuilder sb = new StringBuilder();XmlDocument dc = new XmlDocument();string path = Server.MapPath("~/html5Reader/ReaderData.xml");dc.Load(path);XmlNodeList xnl = dc.SelectNodes("section/chapter");sb.Append("<ul>");readxml(xnl, sb);sb.Append("</ul>");this.html.InnerHtml = sb.ToString();}private void readxml(XmlNodeList xmlnl,StringBuilder sb_){foreach (XmlNode xl in xmlnl){if (xl.ChildNodes.Count == 0){sb_.Append("<li><a>" + xl.Attributes["value"].Value + "</a></li>");}else{sb_.Append("<li><a>" + xl.Attributes["value"].Value + "</a><ul>");readxml(xl.ChildNodes, sb_);sb_.Append("</ul></li>");}}}前台很页⾯:<html xmlns="/1999/xhtml"><head runat="server"><title></title></head><body><form id="form1" runat="server"><div id="html" runat="server"></div></form></body></html>运⾏后然后再写下样式表,即可⽣成美观的⽬录!PS:不怎么写博客,发现写博客真不容易,花了差不多⼀个钟,写得不好⼤家见谅,本⽂对⼤家有⽤的就推荐下!。

Jquery遍历json的两种数据结构

Jquery遍历json的两种数据结构

没有落叶的秋-博客:/s/blog_8fbeeb59010153d3.html Jquery遍历json的两种数据结构简介什么是JSON?JSON 即JavaScript Object Natation(Java对象表示法),它是一种轻量级的数据交换格式,非常适合于服务器与JavaScript 的交互。

简而言之,JSON就是JavaScript交换数据的一种格式。

例子如下:{"username":"coolcooldool","password":"1230","usertype":"superadmin" }{"list":[{"password":"1230","username":"coolcooldool"},{"password":" thisis2","username":"okokok"}]}第二种是有数组的情况,我也不用文字表述JSON到底是怎么构成的了,相信长眼睛的人都看懂了。

为什么使用JSON而不是XML?尽管有许多宣传关于 XML 如何拥有跨平台,跨语言的优势,然而,除非应用于 Web Services,否则,在普通的 Web 应用中,开发者经常为 XML 的解析伤透了脑筋,无论是服务器端生成或处理 XML,还是客户端用 JavaScript 解析 XML,都常常导致复杂的代码,极低的开发效率。

实际上,对于大多数 Web 应用来说,他们根本不需要复杂的 XML 来传输数据,XML 的扩展性很少具有优势,许多 AJAX 应用甚至直接返回 HTML 片段来构建动态 Web 页面。

和返回 XML 并解析它相比,返回 HTML 片段大大降低了系统的复杂性,但同时缺少了一定的灵活性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档