一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)_jquery

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;
using System.Xml;
using System.Xml.Linq;
namespace WebApplication3 {
public partial class WebForm1: System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
int id = Convert.ToInt32(Request["parentID"]);
GetXML(id);
}
public IList < Product > GetList() {
return new List < Product > () {
new Product() {
Id = 1,
ParentId = 0,
HasChild = 1,
Name = "aaaaa"
},
new Product() {
Id = 2,
ParentId = 1,
HasChild = 1,
Name = "bbbb1"
},
new Product() {
Id = 3,
ParentId = 2,
HasChild = 0,
Name = "ccccc2"
},
new Product() {
Id = 4,
ParentId = 2,
HasChild = 0,
Name = "ddddd3"
},
new Product() {
Id = 5,
ParentId = 1,
HasChild = 0,
Name = "eeeeee4"
},
new Product() {
Id = 6,
ParentId = 3,
HasChild = 0,
Name = "ffffff5"
},
new Product() {
Id = 7,
ParentId = 4,
HasChild = 0,
Name = "ggggggg6"
},
new Product() {
Id = 8,
ParentId = 7,
HasChild = 0,
Name = "hhhhhhh7"
},
new Product() {
Id = 9,
ParentId = 0,
HasChild = 0,
Name = "jjjjjjj8"
},
new Product() {
Id = 10,
ParentId = 0,
HasChild = 0,
Name = "yyyyyyyy9"
}
};
} /// <summary>
/// 通过父节点读取子节点并且拼接成xml给前台
/// </summary>
/// <param name="parentId"></param>
public void GetXML(int parentId) {
List<Product> list = GetList().Where(x => x.ParentId == parentId).ToList();
XElement xElement = new XElement("textTree");
foreach (Product p in list) {
xElement.Add(new XElement("value", new XAttribute("id", p.Id),p.Name));
}
xElement.Save("d:\\kissnana.xml");
XmlDocument xdocument = new XmlDocument();
xdocument.Load("d:\\kissnana.xml");
Response.ContentType = "text/xml";
xdocument.Save(Response.OutputStream);
Response.End();
}
}
public class Product {
public int Id{set;get;}
public int ParentId{set;get;}
public int HasChild{set;get;}
public string Name{set;get;}
}}
思路很简单,后台利用xml送往前台通过jquery接收处理拼接ul,
li原理(利用 < li > 中嵌套 < ul > 的方式,局部读取一节点下的所有直属子节点,每次点击读取,读取过的话,则进入GetDisplayOrNot()方法判断显示和隐藏节点)html代码: < body > <form id = "form1"
runat = "server" > <input type = "button"
value = "text"
onclick = "LoadXml(0)" / ><div id = "root" > </div>
</form >
</body>

前台代码:

复制代码 代码如下:

<script type="text/javascript">
var object1 = null;
function LoadXml(id) {
$.ajax({
type: "
post ",
url:"
WebForm1.aspx ? parentID = "+id,
dataType:"
xml ",
success: createTree
});
}
// 思路是每个父节点产生一个ul孩子并且ajax读取该父亲的直接儿子,拼接树
function createTree(xml) {
var obj = object1 == null ? ("#root ") : (object1);//判断是不是第一次加载,如果第一次加载则是最外的div的id,否则是父节点
$(obj).append(" < UL class = 'ULfather' > ");//添加ul对象
$(xml).find("
value ").each(function() {//从xml里读出所有value节点信息,得到当前层次节点
//拼接<li>和<a>,属性通过xml中的value节点的属性id和节点文本进行拼接
$(obj).children(".ULfather ").append(" < li > <a id = " + $(this).attr("
id ") + " > " + $(this).text() + " < /a></li > ");
var alink = "#" + $(this).attr("
id "); //得到当前超链接对象
$(alink).bind("
click ", function() { //超连接绑定点击事件
if ($(alink + " + ul ").size() <= 0) {//如果数据已经绑定则无需再次绑定,(如果超链接下个元素是ul的话,说明数据已经绑过)
object1 = $(alink).parent("
li ");
LoadXml($(this).attr("
id "))
}
else {
GetDisplayOrNot($(alink));
}
});
});
}
//节点显示或影藏
function GetDisplayOrNot(obj) {
if ($(obj).parent("
li ").children("
ul ").is(": hidden ")) {
$(obj).parent("
li ").children("
ul ").css("
display ", "
block ");
}
else {
$(obj).parent("
li ").children("
ul ").css("
display ", "
none ");
}
}
</script>

后台:

复制代码 代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Linq;
using System.Xml;
using System.Xml.Linq;
namespace WebApplication3
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int id =Convert.ToInt32(Request["parentID"]);
GetXML(id);
}
public IList<Product> GetList()
{
return new List<Product>()
{
new Product(){ Id=1, ParentId=0, HasChild=1, Name="aaaaa" },
new Product(){ Id=2, ParentId=1, HasChild=1, Name="bbbb1" },
new Product(){ Id=3, ParentId=2, HasChild=0, Name="ccccc2" },
new Product(){ Id=4, ParentId=2, HasChild=0, Name="ddddd3" },
new Product(){ Id=5, ParentId=1, HasChild=0, Name="eeeeee4" },
new Product(){ Id=6, ParentId=3, HasChild=0, Name="ffffff5" },
new Product(){ Id=7, ParentId=4, HasChild=0, Name="ggggggg6" },
new Product(){ Id=8, ParentId=7, HasChild=0, Name="hhhhhhh7" },
new Product(){ Id=9, ParentId=0, HasChild=0, Name="jjjjjjj8" },
new Product(){ Id=10,ParentId=0, HasChild=0, Name="yyyyyyyy9" }
};
}

/// <summary>
/// 通过父节点读取子节点并且拼接成xml给前台
/// </summary>
/// <param name="parentId"></param>
public void GetXML(int parentId)
{
List<Product> list = GetList().Where(x => x.ParentId == parentId).ToList();
XElement xElement = new XElement("textTree");
foreach (Product p in list)
{
xElement.Add(new XElement("value", new XAttribute("id", p.Id),p.Name));
}
xElement.Save("d:\\kissnana.xml");
XmlDocument xdocument = new XmlDocument();
xdocument.Load("d:\\kissnana.xml");
Response.ContentType = "text/xml";
xdocument.Save(Response.OutputStream);
Response.End();
}
}
public class Product
{
public int Id{set;get;}
public int ParentId{set;get;}
public int HasChild{set;get;}
public string Name{set;get;}
}
}

时间: 2024-09-20 17:22:08

一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)_jquery的相关文章

android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事。

问题描述 android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事. eclipse上也没有错误提示,怎么运行不了.安装好就提示停止运行. 文件 解决方案 看logcat的日志,或者进入调试模式运行,一步步调 解决方案二: 亲,绑定布局空间是要通过布局管理者来获取的,不然就是空指针错误.具体如下 解决方案三: 用调试模式调试吧,很方便的. 解决方案四: 要看log日志的啊.看日志才知道哪里出错了, 解决方案五: fragment控件初始化的问题吧 解决方案六: fragment控

绘图-MATLAB做一个很简单的图

问题描述 MATLAB做一个很简单的图 用matlab把下面这个表格实现,横坐标表示字种数,纵坐标表示百分比,具体怎么实现,多谢了 解决方案 可以呀,把plot改为bar 解决方案二: x=[500 1000 1500 2000 2500 3000 3500 4000];y=[78.53 91.92 96.48 98.39 99.24 99.63 99.82 99.92];plot(xy) 解决方案三: 想请你半个忙,如果可以加我QQ:815359755 解决方案四: x=[500 1000 1

objective-c-ios 想问一个很简单的异步问题

问题描述 ios 想问一个很简单的异步问题 [manager POST:@""https://www.baidu.com"" parameters:@{} success:^(AFHTTPRequestOperation *operation id responseObject) { NSLog(@""ok1""); } NSLog(@""ok2""); 很明显这段代码 如果打印的话 肯

编程-一个很简单的turbo c课堂复习试题的求解

问题描述 一个很简单的turbo c课堂复习试题的求解 turbo c中编程实现对回文数的判断,比如12321,就是一个回文数. 解决方案 #include <stdio.h> int rev(int n, int acc) { if (n == 0) return acc; return rev(n / 10, acc * 10 + n % 10); } int main() { int x = 1230321; int y = rev(x, 0); printf("%sn&quo

数字-请教一个很简单的关于azure的技术问题

问题描述 请教一个很简单的关于azure的技术问题 请教一个很简单的技术问题:假设在windows azure中的网站,被浏览次数在管理后台哪里可以看到?其中"请求"数字是访问次数吗? 解决方案 azure没有这样的功能,你可以在你的页面上嵌入一段脚本,让第三方网站帮你统计.百度.google都有这样的站长统计. 解决方案二: 您好, 据我所知,Azure website service中可以在monitor(监视)面板中通过添加"Metric"将"Req

救急。。。一个很简单的问题。。。。。。

问题描述 救急...一个很简单的问题......winform中手动添加了一个webservice,代码如下:SELECT.Z1RFC_SELECT_SMSServiceweb=newSMS.Server.SELECT.Z1RFC_SELECT_SMSService();NetworkCredentialnw=newNetworkCredential("smsvendor","123");web.Credentials=nw;SELECT.ZFEE_001[]sap

添加引用-一个很简单的问题:关于VS2013使用ado

问题描述 一个很简单的问题:关于VS2013使用ado 最近在学习如何用ado和adox,其中教程有一步是添加com引用Microsoft ADO Ext. 6.0 for DDL and Security 然后VS2013中我找了半天没找到在哪里 如果是这里的话怎么没有呢? REGSVR32 "C:Program FilesCommon FilesSystemadomsado15.dll" REGSVR32 "C:Program FilesCommon FilesSyste

代码-一个很简单的界面设计问题。不知道具体的界面逻辑。

问题描述 一个很简单的界面设计问题.不知道具体的界面逻辑. 要求当点击下面的四个按钮时弹出新窗口(我用的push),但是push出来的默认带leftitem返回嘛,可是我的不带.不知道是不是viewcontroller写的逻辑问题. 我是把rootviewcontroller设置成UINavigationController,appdelegate代码如下 - (BOOL)application:(UIApplication *)application didFinishLaunchingWit

请教一个很简单的问题,如何在ASP.net页面上显示一个变量

问题描述 请教一个很简单的问题,如何在ASP.net页面上显示一个变量,比如登陆的时候,在固定位置显示***你好.如果不用response.write还有没有别的办法啊 解决方案 解决方案二:可以在你想放变量的地方放一个LABEL..赋值后显示就OK了解决方案三:好的,谢谢啦解决方案四:方法很多,常见的如楼上