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

复制代码 代码如下:

  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;}

  }

  }