Bootstrap框架建立树形菜单(Tree)的实例代码


Posted in Javascript onOctober 30, 2017

 这里的Tree指的是树形菜单,这篇文章通过一个实例来讲解一下,在Bootstrap框架下怎么去建立一个树形菜单。

前提:先添加Bootstrap和JQ的引用

<link rel="stylesheet" type="text/css" href="bootstrap-3.3.0-dist/dist/css/bootstrap.min.css" rel="external nofollow" >
<script src="bootstrap-3.3.0-dist/dist/js/jquery-1.11.2.min.js"></script>
<script src="bootstrap-3.3.0-dist/dist/js/bootstrap.min.js"></script>

HTML CODE

<div class="tree well">
 <ul>
 <li> <span><i class="icon-folder-open"></i> 廊坊师范学院</span>
  <ul>
  <li> <span><i class="icon-minus-sign"></i> 教育学院</span>
   <ul>
   <li> <span><i class="icon-leaf"></i> 学前教育</span> </li>
   </ul>
  </li>
  <li> <span><i class="icon-minus-sign"></i> 物电学院</span>
   <ul>
   <li> <span><i class="icon-leaf"></i> 电气工程技术</span> </li>
   <li> <span><i class="icon-minus-sign"></i> 电子信息科学技术</span>
    <ul>
    <li> <span><i class="icon-minus-sign"></i> 电子一班</span>
     <ul>
     <li> <span><i class="icon-leaf"></i> 宋笑</span> </li>
     <li> <span><i class="icon-leaf"></i> 二盟</span> </li>
     </ul>
    </li>
    <li> <span><i class="icon-leaf"></i> 电子二班</span> </li>
    </ul>
   </li>
   <li> <span><i class="icon-leaf"></i> 物理学</span> </li>
   </ul>
  </li>
  </ul>
 </li>
 </ul>
</div>

CSS CODE

(为树形菜单添加样式,使其符合Bootstrap框架的风格)

.tree {
 min-height:20px;
 padding:19px;
 margin-bottom:20px;
 background-color:#fbfbfb;
 border:1px solid #999;
 -webkit-border-radius:4px;
 -moz-border-radius:4px;
 border-radius:4px;
 -webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
 -moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);
 box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05)
}
.tree li {
 list-style-type:none;
 margin:0;
 padding:10px 5px 0 5px;
 position:relative
}
.tree li::before, .tree li::after {
 content:'';
 left:-20px;
 position:absolute;
 right:auto
}
.tree li::before {
 border-left:1px solid #999;
 bottom:50px;
 height:100%;
 top:0;
 width:1px
}
.tree li::after {
 border-top:1px solid #999;
 height:20px;
 top:25px;
 width:25px
}
.tree li span {
 -moz-border-radius:5px;
 -webkit-border-radius:5px;
 border:1px solid #999;
 border-radius:5px;
 display:inline-block;
 padding:3px 8px;
 text-decoration:none
}
.tree li.parent_li>span {
 cursor:pointer
}
.tree>ul>li::before, .tree>ul>li::after {
 border:0
}
.tree li:last-child::before {
 height:30px
}
.tree li.parent_li>span:hover, .tree li.parent_li>span:hover+ul li span {
 background:#eee;
 border:1px solid #94a0b4;
 color:#000
}

JS CODE

<script type="text/javascript">
 //为节点添加展开,关闭的操作
$(function(){
 $('.tree li:has(ul)').addClass('parent_li').find(' > span').attr('title', 'Collapse this branch');
 $('.tree li.parent_li > span').on('click', function (e) {
  var children = $(this).parent('li.parent_li').find(' > ul > li');
  if (children.is(":visible")) {
   children.hide('fast');
   $(this).attr('title', 'Expand this branch').find(' > i').addClass('icon-plus-sign').removeClass('icon-minus-sign');
  } else {
   children.show('fast');
   $(this).attr('title', 'Collapse this branch').find(' > i').addClass('icon-minus-sign').removeClass('icon-plus-sign');
  }
  e.stopPropagation();
 });
});
</script>

效果:

Bootstrap框架建立树形菜单(Tree)的实例代码 

一棵符合Bootstrap风格的树就这么建造完成了,优点自不用说:整洁,美观。

这是一个demo,所以树中的值都是写死在html里面的,但是在实际项目中,树形菜单一般都是动态生成的,而Bootstrap却没有为我们提供一个类似TreeView那样的控件,只需要绑定上数据就可以动态生成一棵树,所以生成树的逻辑都需要我们手动用JS代码进行编写。这个过程着实有点繁琐,递归+嵌套。。

当然市面上也有很多封装好的一些树形菜单的插件,DTree,TreeList widget,Ztree,jQuery等等,就是外观和Bootstrap框架有点不搭。

有这么个折中的办法,就是取长补短,把Bootstrap的样式应用到这些封装好的树形插件上来满足需求。

Javascript 相关文章推荐
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
jquery和css3实现的炫酷时尚的菜单导航
Sep 01 Javascript
JavaScript使用focus()设置焦点失败的解决方法
Sep 03 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
Jun 03 Javascript
浅谈jquery点击label触发2次的问题
Jun 12 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
微信小程序教程系列之视图层的条件渲染(10)
Apr 19 Javascript
jquery实现动态添加附件功能
Oct 23 jQuery
详解vue更改头像功能实现
Apr 28 Javascript
基于Vue实现电商SKU组合算法问题
May 29 Javascript
基于ts的动态接口数据配置的详解
Dec 18 Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 #Javascript
ES6 javascript中class类的get与set用法实例分析
Oct 30 #Javascript
原生JS与jQuery编写简单选项卡
Oct 30 #jQuery
简单实现jQuery弹窗效果
Oct 30 #jQuery
Bootstrap栅格系统的使用详解
Oct 30 #Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
Oct 30 #Javascript
用React实现一个完整的TodoList的示例代码
Oct 30 #Javascript
You might like
摩卡咖啡
2021/03/03 咖啡文化
小偷PHP+Html+缓存
2006/12/20 PHP
Erlang的运算符(比较运算符,数值运算符,移位运算符,逻辑运算符)
2012/07/23 PHP
基于php数组中的索引数组和关联数组详解
2018/03/12 PHP
JavaScript iframe的相互操作浅析
2009/10/14 Javascript
json 实例详细说明教程
2009/10/31 Javascript
JavaScript初学者需要了解10个小技巧
2010/08/25 Javascript
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
js 验证密码强弱的小例子
2013/03/21 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
百度地图api如何使用
2015/08/03 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
基于JS实现无缝滚动思路及代码分享
2016/06/07 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
详谈Node.js之操作文件系统
2017/08/29 Javascript
Koa2微信公众号开发之消息管理
2018/05/16 Javascript
Bootstrap模态对话框中显示动态内容的方法
2018/08/10 Javascript
详解javascript对数组和json数组的操作
2019/04/15 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
Nodejs + sequelize 实现增删改查操作
2020/11/07 NodeJs
Python实现竖排打印传单手机号码易撕条
2015/03/16 Python
Python遍历指定文件及文件夹的方法
2015/05/09 Python
Python多进程并发(multiprocessing)用法实例详解
2015/06/02 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
在Python中字符串、列表、元组、字典之间的相互转换
2019/11/15 Python
python实现名片管理器的示例代码
2019/12/17 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
idealfit英国:世界领先的女性健身用品和运动衣物品牌
2017/11/25 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
如何写早恋检讨书
2014/09/10 职场文书
vue ref如何获取子组件属性值
2022/03/31 Vue.js
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android