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 相关文章推荐
广告代码静态化js通用函数
May 09 Javascript
JS数组去重与取重的示例代码
Jan 24 Javascript
js类定义函数时用prototype与不用的区别示例介绍
Jun 10 Javascript
微信小程序 教程之WXML
Oct 18 Javascript
ES6新特性之变量和字符串用法示例
Apr 01 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
JavaScript解析及序列化JSON的方法实例分析
Jan 04 Javascript
在JavaScript中实现链式调用的实现
Dec 24 Javascript
js实现随机抽奖
Mar 19 Javascript
vue使用video插件vue-video-player的示例
Oct 03 Javascript
解决Antd Table表头加Icon和气泡提示的坑
Nov 17 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
mysql limit查询优化分析
2008/11/12 PHP
PHP高级OOP技术演示
2009/08/27 PHP
标准PHP的AES加密算法类
2015/03/12 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
推荐40款强大的 jQuery 导航插件和教程(上篇)
2012/09/14 Javascript
js解析与序列化json数据(三)json的解析探讨
2013/02/01 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
公共js在页面底部加载的注意事项介绍
2013/07/18 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
jQuery实现的漂亮表单效果代码
2015/08/18 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
vue之父子组件间通信实例讲解(props、$ref、$emit)
2018/05/22 Javascript
微信小程序实现底部导航
2018/11/05 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
解决vue-photo-preview 异步图片放大失效的问题
2020/07/29 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python中的lambda表达式用法详解
2016/06/22 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
Python人工智能之路 jieba gensim 最好别分家之最简单的相似度实现
2019/08/13 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Django如何使用redis作为缓存
2020/05/21 Python
印度首个本地在线平台:nearbuy
2019/03/28 全球购物
关于期中考试的反思
2014/02/02 职场文书
村容村貌整治方案
2014/05/21 职场文书
学生自我评语
2015/01/04 职场文书
我们的节日中秋节活动总结
2015/03/23 职场文书
2019年浪漫婚礼证婚词
2019/06/27 职场文书