当前位置: 首页 > news >正文

纯html无限级目录树,利用Ajax实现无限级目录树(.NET)[转载]

比较符合自己的习惯,整个代码不难。是利用CSS实现的。

家里的电脑上不能安装MS SQL,索性就用MySQL。顺路学习了一下使用MySql的Function。

希望使用的XDJM能在这里留个言。谢谢

数据库:

ysql> create table category(

-> categoryid int,

-> categoryname varchar(20),

-> FatherId int);

DELIMITER //

mysql> create function IsLeaf(cat_id int)

-> returns int

-> begin

-> declare count int;

-> select count(*) into count from category where fatherid=cat_id;

-> if count = 0 then

-> return 1

-> ;

-> end if;

-> return 0;

-> end;

-> //

mysql> insert into category values(1,'My Documen

-> ;

Query OK, 1 row affected (0.08 sec)

mysql> insert into category values(2,'ASP.NET',1

-> ;

Query OK, 1 row affected (0.02 sec)

mysql> insert into category values(3,'JAVA',1)

-> ;

Query OK, 1 row affected (0.03 sec)

mysql> insert into category values(4,'C#',1)

-> ;

Query OK, 1 row affected (0.04 sec)

mysql> insert into category values(5,'HTML',1)

-> ;

Query OK, 1 row affected (0.01 sec)

mysql> insert into category values(6,'Oracle',1)

-> ;

Query OK, 1 row affected (0.02 sec)

mysql> insert into category values(7,'Line',1)

-> ;

Query OK, 1 row affected (0.02 sec)

Tree.aspx

Tree

基于Ajax的动态树型菜单

function ExpandSubCategory(iCategoryID)

{

var li_father = document.getElementById("li_" + iCategoryID);

if (li_father.getElementsByTagName("li").length > 0) //分类已下载

{

ChangeStatus(iCategoryID);

displayDocList(iCategoryID);

return;

}

li_father.className = "Opened";

switchNote(iCategoryID, true);

Tree.GetSubCategory(iCategoryID, GetSubCategory_callback);

}

function GetSubCategory_callback(response)

{

var dt = response.value.Tables[0];

if (dt.Rows.length > 0)

{

var iCategoryID = dt.Rows[0].FatherID;

}

var li_father = document.getElementById("li_" + iCategoryID);

var ul = document.createElement("ul");

for (var i = 0;i < dt.Rows.length;i++)

{

if (dt.Rows[i].IsChild == 1) //叶子节点

{

var li = document.createElement("li");

li.className = "Child";

li.id = "li_" + dt.Rows[i].CategoryID;

var img = document.createElement("img");

img.id = dt.Rows[i].CategoryID;

img.className = "s";

img.src = "css/s.gif";

var a = document.createElement("a");

a.href = "javascript:OpenDocument('" + dt.Rows[i].CategoryID + "');";

a.innerHTML = dt.Rows[i].CategoryName;

}

else

{

var li = document.createElement("li");

li.className = "Closed";

li.id = "li_" + dt.Rows[i].CategoryID;

var img = document.createElement("img");

img.id = dt.Rows[i].CategoryID;

img.className = "s";

img.src = "css/s.gif";

img.onclick = function () {

ExpandSubCategory(this.id);

};

img.alt = "展开/折叠";

var a = document.createElement("a");

a.href = "javascript:ExpandSubCategory(" +

dt.Rows[i].CategoryID + ");";

a.innerHTML = dt.Rows[i].CategoryName;

}

li.appendChild(img);

li.appendChild(a);

ul.appendChild(li);

}

li_father.appendChild(ul);

displayDocList(iCategoryID);

switchNote(iCategoryID, false);

}

function OpenDocument(iCategoryID)

{

var div_docContent = document.getElementById("docContent");

var div_docList = document.getElementById("docList");

div_docContent.style.display = "";

div_docList.style.display = "none";

Tree.GetDocInfo(iCategoryID, GetDocInfo_callback);

}

function GetDocInfo_callback(response)

{

}

function ChangeStatus(iCategoryID)

{

var li_father = document.getElementById("li_" + iCategoryID);

if (li_father.className == "Closed")

{

li_father.className = "Opened";

}

else

{

li_father.className = "Closed";

}

}

function switchNote(iCategoryID, show)

{

var li_father = document.getElementById("li_" + iCategoryID);

if (show)

{

var ul = document.createElement("ul");

ul.id = "ul_note_" + iCategoryID;

var note = document.createElement("li");

note.className = "Child";

var img = document.createElement("img");

img.className = "s";

img.src = "css/s.gif";

var a = document.createElement("a");

a.href = "javascript:void(0);";

a.innerHTML = "请稍候...";

note.appendChild(img);

note.appendChild(a);

ul.appendChild(note);

li_father.appendChild(ul);

}

else

{

var ul = document.getElementById("ul_note_" + iCategoryID);

if (ul)

{

li_father.removeChild(ul);

}

}

}

function displayDocList(iCategoryID)

{

var div_docContent = document.getElementById("docContent");

var div_docList = document.getElementById("docList");

div_docContent.style.display = "none";

div_docList.style.display = "";

div_docList.style.padding = 20;

while (div_docList.childNodes.length > 0)

{

div_docList.removeChild(div_docList.childNodes[0]);

}

var dt = Tree.GetDocInfoInCategory(iCategoryID).value.Tables[0];

if (dt)

{

for (var i = 0;i < dt.Rows.length;i++)

{

var a = document.createElement("a");

a.href = "javascript:OpenDocument(" + dt.Rows[i].CategoryID + ");";

a.innerHTML = "" + dt.Rows[i].CategoryName + "";

var li = document.createElement("li");

li.appendChild(a);

var div = document.createElement("div");

div.appendChild(li);

div_docList.appendChild(div);

}

}

}

// 加载根节点

var tree = document.getElementById("CategoryTree");

var root = document.createElement("li");

root.id = "li_0";

tree.appendChild(root);

// 加载页面时显示第一级分类

ExpandSubCategory(0);

Tree.aspx.csusing System;

using System.Data;

using System.Configuration;

using System.Collections;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using AjaxPro;

using MySql.Data.MySqlClient;

public partial class Tree : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

Utility.RegisterTypeForAjax(typeof(Tree));

}

private Random rand = new Random();

[AjaxMethod()]

public DataSet GetSubCategory(int iCategoryID)

{

DataSet ds = new DataSet();

MySqlConnection conn = new MySqlConnection("server=127.0.0.1;uid=root;pwd=111111;database=test");

MySqlCommand cmd = conn.CreateCommand();

cmd.CommandText = string.Format("SELECT CategoryID, CategoryName, FatherID, IsLeaf(CategoryID) as IsChild FROM Category WHERE FatherID = {0}", iCategoryID);

MySqlDataAdapter da = new MySqlDataAdapter(cmd);

try

{

da.Fill(ds);

}

catch (MySqlException)

{

}

finally

{

conn.Close();

}

System.Threading.Thread.Sleep(500 + rand.Next(1000));

Console.WriteLine(ds.Tables[0].Rows.Count.ToString());

return ds;

}

[AjaxMethod()]

public DataSet GetDocInfo(int iCategoryID)

{

DataSet ds = new DataSet();

return ds;

}

[AjaxMethod()]

public DataSet GetDocInfoInCategory(int iCategoryID)

{

DataSet ds = new DataSet();

MySqlConnection conn = new MySqlConnection("server=127.0.0.1;uid=root;pwd=111111;database=test");

MySqlCommand cmd = conn.CreateCommand();

cmd.CommandText = string.Format(

"SELECT CategoryID, CategoryName, FatherID FROM Category WHERE FatherID = {0} AND IsLeaf(CategoryID) = 1", iCategoryID);

MySqlDataAdapter da = new MySqlDataAdapter(cmd);

try

{

da.Fill(ds);

}

catch (MySqlException)

{

}

finally

{

conn.Close();

}

return ds;

}

}

CSSa

{

text-decoration:none;

}

a,a:visited

{

color:#000;

background:inherit;

}

body

{

margin:0;

padding:20px;

font:12px tahoma,宋体,sans-serif;

}

dt

{

font-size:22px;

font-weight:bold;

margin:0 0 0 15px;

}

dd

{

margin:0 0 0 15px;

}

h4

{

margin:0;

padding:0;

font-size:18px;

text-align:center;

}

p

{

margin:0;

padding:0 0 0 18px;

}

p a,p a:visited

{

color:#00f;

background:inherit;

}

.TreeMenu img.s

{

cursor:hand;

vertical-align:middle;

}

.TreeMenu ul

{

padding:0;

}

.TreeMenu li

{

list-style:none;

padding:0;

}

.Closed ul

{

display:none;

}

.Child img.s

{

background:none;

cursor:default;

}

#CategoryTree ul

{

margin:0 0 0 17px;

}

#CategoryTree img.s

{

width:34px;

height:18px;

}

#CategoryTree .Opened img.s

{

background:url(skin3/opened.gif) no-repeat 0 1px;

}

#CategoryTree .Closed img.s

{

background:url(skin3/closed.gif) no-repeat 0 1px;

}

#CategoryTree .Child img.s

{

background:url(skin3/child.gif) no-repeat 13px 2px;

}

#CategoryTree

{

float:left;

width:249px;

border:1px solid #99BEEF;

background:#D2E4FC;

color:inherit;

margin:3px;

padding:3px;

}

相关文章:

  • 微型计算机自动化控制专业,你也能考国家电网之自动控制类专业!
  • 计算机与现代教育的英语作文,雅思写作大作文范文:电脑与现代教育
  • 五年级英语短文计算机,有关于计算机的英语短文章
  • h5怎么引入html,在html文件引入其它html文件的几种方法
  • html排行榜代码手机版,移动端前端代码优化丨排名VS体验
  • 计算机应用技术教程试题大一,大一计算机导论期末考试试题模拟试题及答案
  • 嵌入式计算机技术分类,嵌入式系统的分类及应用
  • 初中计算机课程图文混排教案,七年级信息技术教案:图文的混合编排
  • 天津城建大学计算机学院官网,天津城建大学计算机与信息工程学院研究生导师简介-杨振舰...
  • 计算机文化基础的改革,计算机学生论文,关于对计算机文化基础课程改革相关参考文献资料-免费论文范文...
  • 鲁迅美术学院考计算机几级,鲁迅美术学院英语四级考试科目安排2020年上半年...
  • 计算机实验圆述职报告,实验员个人述职报告(三)
  • k3 wise组件服务器安装,金蝶 K3 WISE 中间层组件安装报错!
  • outlook服务器与本地文件,Outlook设置本地存储的方法
  • ajax invoke error,javascript - invoke $ajax on confirmation - Stack Overflow
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • ComponentOne 2017 V2版本正式发布
  • IOS评论框不贴底(ios12新bug)
  • JavaScript-Array类型
  • Just for fun——迅速写完快速排序
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • php面试题 汇集2
  • spring boot 整合mybatis 无法输出sql的问题
  • vue总结
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 动态规划入门(以爬楼梯为例)
  • 跨域
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端面试之闭包
  • 前嗅ForeSpider中数据浏览界面介绍
  • 入门到放弃node系列之Hello Word篇
  • 提醒我喝水chrome插件开发指南
  • 原生 js 实现移动端 Touch 滑动反弹
  • HanLP分词命名实体提取详解
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 回归生活:清理微信公众号
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​油烟净化器电源安全,保障健康餐饮生活
  • (js)循环条件满足时终止循环
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm高校实验室 毕业设计 800008
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (论文阅读40-45)图像描述1
  • (转)Scala的“=”符号简介
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • *** 2003
  • .bashrc在哪里,alias妙用
  • .dwp和.webpart的区别
  • .net访问oracle数据库性能问题
  • .NET精简框架的“无法找到资源程序集”异常释疑