惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
Microsoft Security Blog
Microsoft Security Blog
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
S
Schneier on Security
Scott Helme
Scott Helme
C
Check Point Blog
T
Tenable Blog
博客园 - 三生石上(FineUI控件)
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
L
Lohrmann on Cybersecurity
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
N
News and Events Feed by Topic
B
Blog
P
Privacy International News Feed
I
Intezer
T
Threatpost
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Last Week in AI
Last Week in AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LINUX DO - 最新话题
博客园_首页
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cybersecurity and Infrastructure Security Agency CISA
N
News and Events Feed by Topic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
N
News | PayPal Newsroom
The Hacker News
The Hacker News
S
Security @ Cisco Blogs
罗磊的独立博客
PCI Perspectives
PCI Perspectives
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
大猫的无限游戏
大猫的无限游戏
U
Unit 42
Hacker News: Ask HN
Hacker News: Ask HN
D
Docker
AI
AI
小众软件
小众软件
博客园 - 叶小钗
H
Help Net Security
TaoSecurity Blog
TaoSecurity Blog
P
Privacy & Cybersecurity Law Blog

博客园 - 亦心

教你如何查找并下载某手某音上的外部视频 求出两个字符串中最大长度的相同的子字符串 年会抽奖软件 正则表达式+编码转换小工具 sql语句跨库导入导出 Google maps API开发(二) - 亦心 Google maps API开发(一) - 亦心 Javascript结合XML省市级联 - 亦心 - 博客园 ASP.NET程序读取二代身份证(附源码) - 亦心 - 博客园 仿百度搜索智能提示(纯JS实现) 发现一个免费申请国际域名的地方!! asp.net性能优化 分享一个分页存储过程和分页函数 利用反射实现通用的DataReader转List、DataReader转实体类 任意类型转换成json tsql字符串操作 javascript正则表达式 - 亦心 - 博客园 access、excel取随机n条记录 测试SQL Server执行时间和CPU时间
Javascript树型菜单(含源码)
亦心 · 2010-03-10 · via 博客园 - 亦心

看到园友发表了一篇关于JS树的文章,看了之后,觉得应该可以精简不少代码,

想到了以前做的项目里面用到了一个JS树,于是试着修改了一下,现把代码贴出来与大家共享,还请大家多扔砖头!

前端代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <link href="images/Tree/Tree.css" rel="stylesheet" type="text/css" />
    <style type="text/css">
        #tabMenu {
            border: 1px solid #A3C0E8;
            position: absolute;
            opacity: 0.9;
            display: none;
            cursor: pointer;
            border-collapse: collapse;
            z-index:9999;
            background-color:#fff;
        }
        #tabMenu td {
            border: 1px solid #A3C0E8;
            height: 30px;
            width: 120px;
            text-align: center;
        }
        .righText {
            text-align:right;
            width:120px;
            height:30px;
        }
        #tabDepartment td {
            border: 1px solid #A3C0E8;
        }
    </style>
    <script src="js/jquery-1.11.1.js" type="text/javascript"></script>
    <script src="js/Tree.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
           
            reload();

            var dt = document.getElementById("Tree");
            dt.oncontextmenu = function() {
                return false;
            }
            document.onclick = function() {
                $("#tabMenu").css("display", "none");
            }
            $("#tabMenu").mouseleave(function() {
                $(this).css("display", "none");
            });
        });

        function reload() {
            $.ajax({
                type: 'POST',
                url: "Default.aspx/GetData2",
                data: "{ pid: 0 }",
                contentType: "application/json;charset=utf-8",
                dataType: "json",
                success: function(data) {
                    var obj = eval('(' + data.d + ')');
                    if (obj) {
                        var tree = new treeview("treeview", "/Images/Tree", false, false);
                        var dt = document.getElementById("Tree");
                        dt.innerHTML = "";
                        loopNode(obj, tree);
                        tree.create(dt);
                        tree.nodes.items[0].expand();
                    }
                },
                error: function(r, ex) {
                     
                }
            });
        }
        function stopBubble(e) {
            if (e && e.stopPropagation)
                e.stopPropagation();
            else
                window.event.cancelBubble = true;
            return false;
        }
        function loopNode(obj, parNode) {
            var nd = new node(obj.Name, obj.Name, "", obj.PID, obj.ID, false);
            parNode.add(nd);
            var len = obj.Child.length;
            if (len > 0) {
                for (var i = 0; i < len; i++) {
                    var d = obj.Child[i];
                    if (d.Child && d.Child.length > 0) {
                        loopNode(d, nd)
                    }
                    else {
                        nd.add(new node(d.Name, d.Name, "", d.PID, d.ID, false));
                    }
                }
            }
        }
        treeview.prototype.oncontextmenu = function(sender, e) {
            selectedNode = sender;
            var ps = sender.position(e);
            $("#tabMenu").css({ left: ps.x, top: ps.y, display: 'block' });
            return stopBubble(e);
        }
        treeview.prototype.onnodeclick = function(sender) {
            selectedNode = sender;
           
            return false;
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="Tree">
    
    </div>
    
        <table id="tabMenu" border="1">
        <tr>
            <td>添加</td>
        </tr>
        <tr>
            <td>修改</td>
        </tr>
        <tr>
            <td>删除</td>
        </tr>
    </table>
    </form>
</body>
</html>

后台代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Text;
using Utility;
using Newtonsoft.Json;

namespace WebApplication1
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        [WebMethod]
        public static string GetData2(int pid)
        {
            StringBuilder sb = new StringBuilder();
            List<HRDepartmentEntity> alist = Getlist();
            List<HRDepartmentEntity> clist = alist.FindAll(p => p.ParentID == pid).OrderBy(q => q.DepartmentOrder).ToList();
          
            LoopDepartment(alist, clist, sb, pid);
            
            return sb.ToString();
        }

        [WebMethod]
        public static string GetData(int pid)
        {
            StringBuilder sb = new StringBuilder();
            List<HRDepartmentEntity> alist = Getlist();
            DepartmentSingle ds = new DepartmentSingle();
            ds.Name = "Test";
            LoopDepartment2(alist, ds);
            string str = JsonConvert.SerializeObject(ds);
            return str;
        }


        /// <summary>
        /// 得到组织架构列表
        /// </summary>
        /// <returns></returns>
        private static List<HRDepartmentEntity> Getlist()
        {
            return SQLServerHelper.ExecuteDataTable("select * from HR_Department").ToList<HRDepartmentEntity>();
        }

        private static void LoopDepartment2(List<HRDepartmentEntity> list1, DepartmentSingle ds)
        {
            List<HRDepartmentEntity> list2 = list1.FindAll(p => p.ParentID == ds.ID).OrderBy(q => q.DepartmentOrder).ToList();
            if (list2.Count > 0)
            {
                ds.Child = list2.ConvertAll<DepartmentSingle>(p => new DepartmentSingle { ID = p.DepartmentID, PID = p.ParentID, Name = p.DepartmentName });
                foreach (DepartmentSingle ds2 in ds.Child)
                {
                    LoopDepartment2(list1, ds2);
                }
            }
        }

        private static void LoopDepartment(List<HRDepartmentEntity> alist, List<HRDepartmentEntity> clist, StringBuilder sb, int pid)
        {
            for (int i = 0; i < clist.Count; i++)
            {
                HRDepartmentEntity entity = clist[i];
                int id = entity.DepartmentID;
                List<HRDepartmentEntity> list2 = alist.FindAll(p => p.ParentID == id).OrderBy(q => q.DepartmentOrder).ToList();
                sb.Append("{" + string.Format("ID:{0},PID:{1},Name:'{2}',Order:{3},Child:", id, entity.ParentID, entity.DepartmentName, entity.DepartmentOrder) + "[");
                if (list2.Count > 0)
                {
                    LoopDepartment(alist, list2, sb, id);
                }
                if (i < clist.Count - 1)
                {
                    sb.Append("]},");
                }
                else
                {
                    sb.Append("]}");
                }
            }
        }
    }

    /// <summary>
    /// 组织架构实体类
    /// </summary>
    public class HRDepartmentEntity
    {

        #region 私有变量
        private Int32 m_DepartmentID;
        private String m_DepartmentName;
        private Int32 m_ParentID;
        private String m_ParentName;
        private String m_DepartmentIcon;
        private String m_ResponsiblePerson;
        private String m_Tel;
        private String m_Email;
        private String m_Description;
        private Int32 m_DepartmentOrder;
        private Int32 m_IsDelete;
        private DateTime m_DeleteTime;
        #endregion

        # region 属性方法

        public Int32 DepartmentID
        {
            get { return m_DepartmentID; }
            set { m_DepartmentID = value; }
        }

        public String DepartmentName
        {
            get
            {
                return m_DepartmentName;
            }
            set { m_DepartmentName = value; }
        }

        public Int32 ParentID
        {
            get { return m_ParentID; }
            set { m_ParentID = value; }
        }

        public String ParentName
        {
            get
            {
                return m_ParentName;
            }
            set { m_ParentName = value; }
        }

        public String DepartmentIcon
        {
            get
            {
                return m_DepartmentIcon;
            }
            set { m_DepartmentIcon = value; }
        }

        public String ResponsiblePerson
        {
            get
            {
                return m_ResponsiblePerson;
            }
            set { m_ResponsiblePerson = value; }
        }

        public String Tel
        {
            get
            {
                return m_Tel;
            }
            set { m_Tel = value; }
        }

        public String Email
        {
            get
            {
                return m_Email;
            }
            set { m_Email = value; }
        }

        public String Description
        {
            get
            {
                return m_Description;
            }
            set { m_Description = value; }
        }

        public Int32 DepartmentOrder
        {
            get
            {
                return m_DepartmentOrder;
            }
            set { m_DepartmentOrder = value; }
        }

        public Int32 IsDelete
        {
            get
            {
                return m_IsDelete;
            }
            set { m_IsDelete = value; }
        }

        public DateTime DeleteTime
        {
            get
            {
                return m_DeleteTime;
            }
            set { m_DeleteTime = value; }
        }
        #endregion
    }

    public class DepartmentSingle
    {
        public int ID;
        public int PID;
        public string Name;
        public List<DepartmentSingle> Child;
    }
}


ok了~~就这些,完整源代码下载

每天进步一点点...