模拟select样式,自定义下拉列表为树结构
效果图如下:

首先,需要用到的库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样式,自定义下拉列表为树结构的更多相关文章
- jqueryMobile中select样式自定义
要去掉引入的jqueryMobile给下拉框组件的样式,有两种办法. 第一种:全局的去掉所有的下拉框样式: <link rel="stylesheet" href=" ...
- CSS select样式优化 含jquery代码
CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...
- CSS效果:CSS select样式优化 含jquery代码
CSS 下拉选择菜单基本的CSS样式不怎么好看,通过一些简单的样式优化,可以得到如下图这样的: html结构如下: <div class="sel_wrap"> < ...
- jquery美化select,自定义下拉框样式
select默认的样式比较丑,有些应用需要美化select,在网上找到一个很好的美化样式效果,本人很喜欢,在这里分享一下. <!DOCTYPE html PUBLIC "-//W3C/ ...
- div 模拟<select>事件
IE7 下,不能够自定义<select>/<option>的样式,所以为了方便起见,用div可以进行模拟 <!doctype html> <html> ...
- div模拟select/option解决兼容性问题及增加可拓展性
个人博客: http://mcchen.club 想到做这个模拟的原因是之前使用select>option标签的时候发现没有办法操控option的很多样式,比如line-height等,还会由此 ...
- ul -- li 模拟select下拉框
在写项目中 用到下拉框,一般用 <select name="" id=""> <option value=</option> &l ...
- 打造自定Select样式
打造自定Select样式 我们为什么要自定义select样式? 1.select最大的一个缺陷就是不能自定义下拉按钮的样式. 效果图: 在线演示地址: http://www.smallui.com/j ...
- 通过css属性hack完成select样式美化,并兼容IE
最近在重构时遇到了select样式问题,并且需要在不影响语义化的情况下,兼容IE8. 经过一番的百度后始终没有找到合适的纯CSS解决方案,最后换了一下思路,大胆使用了属性hack: 在chrome和F ...
随机推荐
- 【原创】Zend Framework 2框架之MVC
ZendFramework 2框架之MVC 作者:sys(360电商技术组) 1.前言 Zend Framework 2是zend官方推出的php开源框架,基于php5.3.他全然採用面向对象的代码实 ...
- html5中调用摄像头拍照
方法: getCamera: 获取摄像头管理对象 对象: Camera: 摄像头对象 CameraOption: JSON对象.调用摄像头的參数 PopPosition: JSON对象,弹出拍照或摄像 ...
- bzoj1212: [HNOI2004]L语言(字典树)
1212: [HNOI2004]L语言 题目:传送门 题解: 看完题目之后就觉得可以暴力在字典树上之间询问,一开始还傻了以为用文章来建,肯定用单词啊: 那么我们可以用一个v数组表示当前字符串1~i的区 ...
- Nginx访问VM虚拟机CentOS 7系统与本地Windows系统共享目录403
用VMware安装了CentOS7系统,并搭建了Nginx,MySQL,PHP的web项目运行环境,为了方便Windows本地主机进行程序调试把Windows本地项目目录共享到了虚拟机CentOS中的 ...
- HTTP学习记录
title: HTTP学习记录 toc: true date: 2018-09-21 20:40:48 HTTP协议,HyperText Transfer Protocol,超文本传输协议,是因特网上 ...
- BZOJ 1898 构造矩阵+矩阵快速幂
思路: T的最小公倍数是12 那么12以内暴力 整除12 的部分用矩阵快速幂 //By SiriusRen #include <cstdio> #include <cstring&g ...
- PowerDesigner 16.5 安装及破解步骤
安装: 1.双击运行PowerDesigner16.5_Evaluation.exe,进入安装界面,点击(Next)下一步按钮: 2.下拉菜单选择HongKong,选中 I agree to the ...
- 使用终端改变MAC默认截图存放地址
使用终端改变MAC默认截图存放地址的过程主要分为两步: 第一步:输入如下命令,回车 defaults write com.apple.screencapture location 要存放到的位置的绝对 ...
- ActiveMQ学习笔记(3)----JMS的可靠性机制
1. 消息接收确认 JMS消息只有在被确认之后,才认为已经被成功的消费了,消息成功消费通常包含三个阶段:客户接收消息,客户处理消息和消息被确认. 在事务性会话中,当一个事务被提交的时候,确认自动发生. ...
- 优动漫PAINT-朱槿花的画法
火红夺目的朱槿花,绝对是烘托画面的绝佳布景!画法发非常简单,毫无绘画基础的人也能够将它很好的呈现出来哟~ 教程是简单,呃.... 没有优动漫PAINT软件肿么办? 别着急,╭(╯^╰)╮ 小编给你送来 ...