效果图如下:

首先,需要用到的库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. 数据仓库工具:Hive

    转载请标明出处: http://blog.csdn.net/zwto1/article/details/46430823: 本文出自:[明月的博客] 为什么要选择Hive 基于Hadoop的大数据的计 ...

  2. Git-删除本地文件夹的repository(本地仓库)

    安装git软件后.有些文件夹里会出现带有?的图标,右键菜单上会有"Git-Sync"或者"Git-Commit"等命令:正常的应该是"Git-Clon ...

  3. C/C++数据类型的转换之终极无惑

    程序开发环境:VS2012+Win32+Debug 数据类型在编程中常常遇到.尽管可能存在风险,但我们却乐此不疲的进行数据类型的转换. 1. 隐式数据类型转换 数据类型转换.究竟做了些什么事情呢?实际 ...

  4. zzuoj--10400--海岛争霸(并查集)

    10400: B.海岛争霸 Time Limit: 2 Sec  Memory Limit: 128 MB Submit: 128  Solved: 46 [Submit][Status][Web B ...

  5. 爬虫框架webmagic与spring boot的结合使用--转

    原文地址:http://www.jianshu.com/p/c3fc3129407d 1. 爬虫框架webmagic WebMagic是一个简单灵活的爬虫框架.基于WebMagic,你可以快速开发出一 ...

  6. 51nod 1158 全是1的最大子矩阵(单调栈 ,o(n*m))

    前置问题:51nod 1102 面积最大的矩形 附上链接: 51nod 1102 面积最大的矩形 这题的题解博客 需要了解的知识:单调栈,在前置问题中已经讲解. 解题思路 对每行求左边连续1的个数,得 ...

  7. MySQL学习(一)——启动和登录MySql遇到的问题及解决

    1.MySQL使用命令行启动时报错“发生系统错误 5”,如下: 原因:未用管理员身份运行cmd程序 解决方案:在开始菜单里找到命令提示符,右击选择以管理员身份运行 2.登录时报错“提示mysql不是内 ...

  8. HTML、CSS规范

    作为一名前端开发者,至少要对HTML.CSS规范有个了解,然后尝试在项目是使用,以便别人阅读你代码的时候,也相对轻松点. HTML.CSS规范,参见:编码规范 by @mdo JavaScript 参 ...

  9. [备忘]js-xlsx 操作 Excel 插件

    github地址:https://github.com/SheetJS/js-xlsx oss地址:http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js

  10. 前端那些事之----jQuery

    1.jquery是什么     一个js的框架,可以方便的使用js 2 什么是jQuery对象     是由jQuery封装后的DOM对象     注意:与DOM对象的方法不同,不可以混用,但是可以相 ...