效果图如下:

首先,需要用到的库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. [IOS]mac远程window全屏显示

    在mac自带着一个远程window的软件.这让我们远程起来很方便. 其步骤和window远程也很相似. 输入ip地址: 输入username以及password: 然后点击确定就可以. 只是.这时就出 ...

  2. hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)

    小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Tot ...

  3. &quot;浪潮杯&quot;第六届ACM山东省省赛山科场总结

    从空间拷过来的.尽管已经过去一个月了.记忆犹新 也算是又一次拾起这个blog Just begin 看着一群群大牛还有队友男神的省赛总结都出了 我最终也耐不住寂寞 来做个流水账抒抒情好了 第一次省赛 ...

  4. [codeforces 852 D] Exploration Plan 解题报告 (二分+最大匹配)

    题目链接:http://codeforces.com/problemset/problem/852/D 题目大意: 有V个点,N个队伍,E条边,经过每条边有个时间,告诉你初始N个队伍的位置,求至少有K ...

  5. Spark SQL概念学习系列之Spark SQL概述

    很多人一个误区,Spark SQL重点不是在SQL啊,而是在结构化数据处理! Spark SQL结构化数据处理 概要: 01 Spark SQL概述 02 Spark SQL基本原理 03 Spark ...

  6. 记一次"未将对象引用设置到对象的实例"问题的排查过程

    最近在给一个老项目做数据对接接口. 背景一 该项目最后更新日期为2006年,使用ASP.NET WebForm..Net2.0.OJB.Castle Avtive Record等.由于是某集团的子系统 ...

  7. 如何解决bib的一些问题

    胡老师留的大作业要求综述,因而有很多文献引用.但是当使用bibtex的方法,特别是中文文献的引用会遇到一些问题. 网上相关的解答有: http://blog.sciencenet.cn/blog-10 ...

  8. ActiveMQ学习笔记(4)----JMS的API结构和开发步骤

    1. JMS的API结构 其实上图中的五个API在第一节中我们都已经使用到了.本节将会讲非持久化和持久化topic的使用. 2. JMS的基本开发步骤 1. 创建一个JMS工厂,  Connectio ...

  9. [APIO2012]派遣 可并堆(左偏树)

    没啥说的,自底向上合并大根堆即可. 一边合并,一边贪心弹堆顶直到堆的总和不大于预算. Code: #include <cstdio> #include <algorithm> ...

  10. Nginx域名配置文件bak

    server { listen 80; server_name m.abd.com; rewrite ^(.*)$ https://$host$1 permanent; } server { list ...