`
lgsun592
  • 浏览: 53590 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

如果不用第三方控件,做一个树形菜单有多难?

阅读更多

写在前面:如果是我自己做东西,我不喜欢使用第三方控件,喜欢"闭门造车",当然在我的车快造好了,or造不下去了的时候我还是会打开那扇关闭的门的

 

首先,建一个数据表(Oracle 11g)

 

CREATE TABLE wb_terms (
  id          INTEGER       NOT NULL,
  "NAME"        VARCHAR2(200) NOT NULL,
  parent      INTEGER       DEFAULT 0 NOT NULL
)

 

 插入几条测试数据,如下:



 
后台采用递归查询,想办法将数据返回到前台

 

SELECT 
  t.*
FROM 
  WB_TERMS t
START WITH 
  t.id=0 
CONNECT BY NOCYCLE PRIOR 
  t.id=t.parent
ORDER SIBLINGS BY t.id ASC

 

 重点是前台js,首先要确保在前台页面中包含如下内容

 

 <div id="category_inside" class="inside">

 

 就是一个空 div,呵呵

 

var categoryDiv = "#category_inside";
    $(categoryDiv).html("loading...");
	// 此处采用jquery ajax获得数据,当然你可以使用你喜欢的任何方式
    $.get('your_url', null, function (data, textStatus) {
        $(categoryDiv).html('');
		/*data.successList为后台返回的数据集合*/
        $.each(data.successList, function(key, value) {
            if ($(categoryDiv).html().trim() == '') {
                $(categoryDiv).append("<ul id='id_" + value.parent + "'></ul>");
            } else if ($(categoryDiv + " ul[id=id_" + value.parent + "]").size() == 0) {
                $(categoryDiv + " li[id=id_" + value.parent + "]").append("<ul id='id_" + value.parent + "'></ul>");
            }

            $(categoryDiv + " ul[id=id_" + value.parent + "]").append("<li id='id_" + value.id + "'><label><input type='checkbox' id='" + value.id + "' value='" + value.name + "' name='category'/>" + value.name + "</label></li>");
        });
    });
 

 

最后再附赠一个CSS

 

#category_inside {
    width: auto;
    margin: 10px;
    padding-left: 10px;
    background-color: #FFFFFF;
    border: 1px solid #DFDFDF;
}

ul {
    list-style-type: none;
    padding: 0;
}

li ul {
    padding-left: 20px;
    padding-top: 0;
    padding-bottom: 0;
}

li label input[type="checkbox"] {
    margin-right: 10px;
}

 最终效果如下:


为了实现此树形菜单总共使用了8行js代码,而且其中2行还完全是由括号组成的,反正我感觉挺简单的,你呢?

  • 大小: 10.7 KB
  • 大小: 17 KB
分享到:
评论

相关推荐

    vc++ 应用源码包_6

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_1

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_5

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_2

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 应用源码包_3

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 freeeim_FreeEIM_企业即时通讯软件源代码2010年8月份最新版 FTP、HTTP 多线程断点续传下载文件 源码 gdiplus应用实例 ...

    vc++ 开发实例源码包

    另外有只打开一个应用程序、CRichEdit的使用、最小到托盘、自动检测在线用户(多播组)等。 FreeBird2011Dlg.h 主对话框类头文件 MultiGroup.h 多播组类头文件 UserLink.h 用户链表类头文件 ListenSocket.h 侦听接口...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    JAVA上百实例源码以及开源项目源代码

    简介 笔者当初为了学习JAVA,收集了很多经典源码,源码难易程度分为初级、中级、高级等,详情看源码列表,需要的可以直接下载! 这些源码反映了那时那景笔者对未来的盲目,对代码的热情、执着,对IT的憧憬、向往!...

    易语言程序免安装版下载

    修改扩展界面支持库一,为“树形框”增加多态检查框功能,相应地添加了多个与检查框相关的属性、方法和事件。 17. 修改高级表格支持库,允许“复制选定文本()”“剪切选定文本()”在“允许选择块”属性为假时复制...

Global site tag (gtag.js) - Google Analytics