效果图如下:

首先,需要用到的库jQuery,zTree(官网API:http://www.treejs.cn/v3/api.php)

注意:因为zTree是基于jQuery的,所以应该先引入jQuery的文件,然后再引入zTree的文件(包括js和css文件还有图片)

向下的小三角图片    ,也可以使用自己的图片,这个图片就是下文css代码中的tir.png

具体代码如下:

HTML:

 <div class="select-wrapper">
<div class="select-box" onclick="showTree()">
<div class="select-content" ></div>
<div class="select-icon "></div>
</div>
<div class="select-options">
<div id="selectTree" class="ztree"></div>
</div>
</div>

CSS:

.select-wrapper{
position:relative;
}
.select-box{
width:200px;
height:30px;
border:1px solid #999;
background-color: #fff;
}
.select-box:hover{
border-color:#777;
}
.select-content{
float: left;
height: 28px;
line-height: 28px;
padding:0 5px;
white-space:nowrap;
text-overflow:ellipsis;
}
.select-icon{
float: right;
width:30px;
height:30px;
background: url('../../../../images/tir.png') no-repeat center right;
}
.select-options{
display: none;
min-width:200px;
border:1px solid #999;
background-color: #fff;
position:absolute;
padding:5px;
top:30px;
left:;
}

JS:

 1         var isShow = false;  //标识树结构的弹出框是否是显示的
2 var zNodes = [];
3 var treeObj = null; //存储树结构的所有数据,是在初始化树后,对树的数据进行获取得到的
4 var setting = {
5 view: {
6 dblClickExpand: false,
7 selectedMulti: false, //设置是否能够同时选中多个节点,此处设置为 否
8 showIcon: true, //设置是否显示节点图标
9 showLine: false, //设置是否显示节点与节点之间的连线
10 showTitle: true //设置是否显示节点的title提示信息
11 },
12 data: {
13 simpleData: {
14 enable: true, //设置是否启用简单数据格式(zTree支持标准数据格式跟简单数据格式,上面例子中是标准数据格式)
15 idKey: "id", //设置启用简单数据格式时id对应的属性名称
16 pidKey: "pId" //设置启用简单数据格式时parentId对应的属性名称,ztree根据id及pid层级关系构建树结构
17 }
18 },
19 edit:{
20 drag:{
21 autoExpandTrigger: false,
22 isCopy : false,
23 isMove : false, //拖拽节点按下 Ctrl 或 Cmd 键表示 copy; 否则为 move
24 prev: false,
25 next: false,
26 inner: false
27
28 },
29 enable: true,
30 renameTitle:'Rename',
31 removeTitle:'Remove',
32 showRemoveBtn:false, //是否显示移除按钮,默认为true ,即显示
33 showRenameBtn:false //是否显示重命名按钮,默认为true ,即显示
34
35 },
36 check: {
37 enable : false
38 },
39 callback: {
40 onClick:onClick, //定义节点单击事件回调函数
41 }
42 };
43 //点击树结构的某个节点
44 function onClick(e,treeId,treeNode){
45 $('.select-content').css('width','auto');
46 $('.select-content').text(treeNode.name);
47 var width = parseFloat($('.select-content').css('width'));
48 width + 30 > 200 ? (width = width + 30) : width = 200;
49 $('.select-box').css("outline","none").css('width',width + 'px');
50 $('.select-content').css('width','calc(100% - 30px)');
51 $('.select-options').css("display","none");
52 }
53 //获取树结构的数据,在点击选择框时执行
54 function getTreeData(){
55 $.ajax({
56 type:"get",
57 url:"statics/test/selectTree.json",
58 success:function(data){
59 zNodes = data.data;
60 $.fn.zTree.init($("#selectTree"), setting, zNodes);
61 treeObj = $.fn.zTree.getZTreeObj("selectTree");
62 console.log(data.info);
63 },
64 error:function(data){
65 alert('get data error');
66 }
67 });
68 }
69 //点击选择框时触发
70 function showTree(){
71 isShow = !isShow; //点一下选择框,弹出树,再点一下选择框,弹出树隐藏
72 if(isShow){
73 $('.select-box').css("outline","#acacac solid 1px");//设置选择框的描边样式,模拟select框获取焦点时的效果,不需要的可以删掉
74 $('.select-options').css("display","block");
75 zNodes.length == 0 && (getTreeData());//如果没有获取过树结构的数据,就获取树结构的数据;如果已经获取过树结构的数据,就不执行获取树结构数据的函数
76 $(document).off().on('click',function(e){ //绑定click事件,当弹出框已经弹出时,点击除弹出框以外的区域,弹出框消失
77 var parent = $(".select-wrapper"); // 设置目标区域
78 if(!parent.is(e.target) && (parent.has(e.target).length == 0)){//如果当前点击区域不是目标区域或者点击区域不是目标区域的子代元素,就将弹出框隐藏
79 $('.select-box').css("outline","none");
80 $('.select-options').css("display","none");
81 isShow = false;
82 }
83 });
84 }else{
85 $('.select-box').css("outline","none");
86 $('.select-options').css("display","none");
87 }
88 }

自己模拟的树的json数据:(zTree有两种数据结构,这是其中一种)

 {
"status": "200","info": "success",
"data": [
{"id":1,"pId":0,"name":"总流程总流程总流程总流程总流程总流程总流程总流程总流程总流程","open":true},
{"id":11,"pId":1,"name":"流程1总流程总流程总流程总流程总流程总流程总流程总流程总流程总流程","_id":1},
{"id":111,"pId":11,"name":"流程2"},
{"id":1111,"pId":111,"name":"流程5"},
{"id":11111,"pId":1111,"name":"流程12"},
{"id":11111,"pId":1111,"name":"流程13"},
{"id":1112,"pId":111,"name":"流程6"},
{"id":11121,"pId":1112,"name":"流程14"},
{"id":11122,"pId":1112,"name":"流程15"},
{"id":11123,"pId":1112,"name":"流程16"},
{"id":1113,"pId":111,"name":"流程7"},
{"id":112,"pId":11,"name":"流程3"},
{"id":1121,"pId":112,"name":"流程8"},
{"id":1122,"pId":112,"name":"流程9"},
{"id":113,"pId":11,"name":"流程4"},
{"id":1131,"pId":113,"name":"流程10"},
{"id":1132,"pId":113,"name":"流程11"}
]
}

模拟select样式,自定义下拉列表为树结构的更多相关文章

  1. jqueryMobile中select样式自定义

    要去掉引入的jqueryMobile给下拉框组件的样式,有两种办法. 第一种:全局的去掉所有的下拉框样式: <link rel="stylesheet" href=" ...

  2. CSS select样式优化 含jquery代码

    CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...

  3. CSS效果:CSS select样式优化 含jquery代码

    CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...

  4. jquery美化select,自定义下拉框样式

    select默认的样式比较丑,有些应用需要美化select,在网上找到一个很好的美化样式效果,本人很喜欢,在这里分享一下. <!DOCTYPE html PUBLIC "-//W3C/ ...

  5. div 模拟<select>事件

    IE7 下,不能够自定义<select>/<option>的样式,所以为了方便起见,用div可以进行模拟 <!doctype html> <html> ...

  6. div模拟select/option解决兼容性问题及增加可拓展性

    个人博客: http://mcchen.club 想到做这个模拟的原因是之前使用select>option标签的时候发现没有办法操控option的很多样式,比如line-height等,还会由此 ...

  7. ul -- li 模拟select下拉框

    在写项目中 用到下拉框,一般用 <select name="" id=""> <option value=</option> &l ...

  8. 打造自定Select样式

    打造自定Select样式 我们为什么要自定义select样式? 1.select最大的一个缺陷就是不能自定义下拉按钮的样式. 效果图: 在线演示地址: http://www.smallui.com/j ...

  9. 通过css属性hack完成select样式美化,并兼容IE

    最近在重构时遇到了select样式问题,并且需要在不影响语义化的情况下,兼容IE8. 经过一番的百度后始终没有找到合适的纯CSS解决方案,最后换了一下思路,大胆使用了属性hack: 在chrome和F ...

随机推荐

  1. 剑指offer面试题26-复杂链表的复制

    题目: 请实现函数ComplexListNode* Clone(ComplexListNode* pHead).复制一个复杂链表. 在复杂链表中.每个节点除了一个m_pNext指针指向下一个节点外,另 ...

  2. 50个Android开发技巧(12 为控件加入圆角边框)

    控件的圆角边框能够使你的App看起来更美观,事实上实现起来也非常easy. (原文地址:http://blog.csdn.net/vector_yi/article/details/24463025) ...

  3. Testbench的编写

    Testbench的作用,在于给我们编写的可综合代码的模块送入激励.即在我们波形仿真中用编写testbench来代替拖拽波形.其中还包括了我们硬件仿真与matlab仿真的联调建立(将matlab产生的 ...

  4. C++线程安全退出

    HANDLE m_EvtThreadExit[MaxVisionNum]; //定义 方法一 ;i<MaxVisionNum;i++) m_EvtThreadExit[index] = Crea ...

  5. hbase的命令

    1.1. 命令 名称 命令表达式 创建表 create '表名', '列族名1','列族名2','列族名N' 查看所有表 list 描述表 describe  ‘表名’ 判断表存在 exists  ' ...

  6. html5+css3+javascript 自定义提示窗口

    效果图: 源码: 1.demo.jsp <%@ page contentType="text/html;charset=UTF-8" language="java& ...

  7. Servlet学习(一)——Servlet的生命周期、执行过程、配置

    1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质就是java代码,通过jav ...

  8. IE6 css fixed

    .fixed-top{position:fixed;bottom:auto;top:0px;} .fixed-bottom{position:fixed;bottom:0px;top:auto;} . ...

  9. 路飞学城Python-Day9

    [23.函数-高阶函数]变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称为高阶函数如果一个函数可以接收另一个函数,这个函数就称为高阶函数 def func ...

  10. HTML提交表单

    一.使用form提交表单 <form action="#" method="post"> {% csrf_token %} 班级<input ...