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 相关文章推荐
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 Javascript
checkbox勾选判断代码分析
Jun 11 Javascript
JavaScript ES6的新特性使用新方法定义Class
Jun 28 Javascript
js基于cookie记录来宾姓名的方法
Jul 19 Javascript
jquery Ajax 全局调用封装实例详解
Jan 16 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
详解axios在vue中的简单配置与使用
May 10 Javascript
解决Vue 刷新页面导航显示高亮位置不对问题
Dec 25 Javascript
js回调函数仿360开机
Dec 26 Javascript
微信小程序自定义弹出层效果
May 26 Javascript
微信小程序实现上传照片代码实例解析
Aug 04 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
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php 邮件发送问题解决
2014/03/22 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
prototype1.4中文手册
2006/09/22 Javascript
js与jquery中获取当前鼠标的x、y坐标位置的代码
2011/05/23 Javascript
JavaScript判断文件上传类型的方法
2014/09/02 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
2016/05/26 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
基于javascript实现按圆形排列DIV元素(二)
2016/12/02 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
2017/02/21 Javascript
简单实现JS上传图片预览功能
2017/04/14 Javascript
深入理解Commonjs规范及Node模块实现
2017/05/17 Javascript
JavaScript编程设计模式之构造器模式实例分析
2017/10/25 Javascript
Vue 换肤的示例实践
2018/01/23 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
基于jquery实现左右上下移动效果
2018/05/02 jQuery
使用Vue-Awesome-Swiper实现旋转叠加轮播效果&amp;平移轮播效果
2019/08/16 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue自动化路由的实现代码
2019/09/30 Javascript
uni-app微信小程序登录并使用vuex存储登录状态的思路详解
2019/11/04 Javascript
Vue使用Three.js加载glTF模型的方法详解
2020/06/14 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
python根据京东商品url获取产品价格
2015/08/09 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
电气自动化个人求职信范文
2014/02/03 职场文书
交心谈心活动总结
2015/05/11 职场文书
民事二审代理词
2015/05/25 职场文书
离职证明格式样本
2015/06/12 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
详解PHP Swoole与TCP三次握手
2021/05/27 PHP
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python