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

所属分类: 网络编程 / JavaScript 阅读数: 1354
收藏 0 赞 0 分享
复制代码 代码如下:

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;}
}
}
更多精彩内容其他人还在看

Angular使用Md5加密的解决方法

这篇文章主要介绍了Angular使用Md5加密的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

详解JS构造函数中this和return

本文通过实例代码给大家介绍了JS构造函数中this和return,需要的朋友参考下吧
收藏 0 赞 0 分享

ES6中Array.find()和findIndex()函数的用法详解

ES6为Array增加了find(),findIndex函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined,而findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。下面通过实例详解,需要的朋友参考下吧
收藏 0 赞 0 分享

JS闭包的几种常见形式实例详解

本文通过实例代码给大家详细介绍了js闭包的几种常见形式,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下
收藏 0 赞 0 分享

ES6中Array.copyWithin()函数的用法实例详解

ES6为Array增加了copyWithin函数,用于操作当前数组自身,用来把某些个位置的元素复制并覆盖到其他位置上去。下面重点给大家介绍ES6中Array.copyWithin()函数的用法,需要的朋友参考下
收藏 0 赞 0 分享

Javascript 严格模式use strict详解

严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强。这篇文章主要介绍了Javascript 严格模式use strict详解 ,需要的朋友可以参考下
收藏 0 赞 0 分享

引入JavaScript时alert弹出框显示中文乱码问题

今天在HTML中引入JavaScript文件运行时,alert弹出的提示框中文显示为乱码,怎么解决此问题呢?下面小编给大家带来了引入JavaScript时alert弹出框显示中文乱码问题的解决方法,一起看看吧
收藏 0 赞 0 分享

AngularJs 延时器、计时器实例代码

这篇文章主要介绍了AngularJs 延时器、计时器实例代码,需要的朋友可以参考下
收藏 0 赞 0 分享

JS分页的实现(同步与异步)

这篇文章主要介绍了JS分页的实现(同步与异步),需要的朋友可以参考下
收藏 0 赞 0 分享

Angularjs自定义指令实现分页插件(DEMO)

由于最近的一个项目使用的是angularjs1.0的版本,涉及到分页查询数据的功能,后来自己就用自定义指令实现了该功能,下面小编把实例demo分享到脚本之家平台,需要的朋友参考下
收藏 0 赞 0 分享
查看更多