jQuery实现文档树效果


Posted in Javascript onFebruary 20, 2017

情形:本类别下面有好多子类别,每个子类别下面又有好多孙类别;需求:当点击本类别时,子类别如果是显示的就让它隐藏,子类别如果是隐藏的就让它显示。

效果如下:

jQuery实现文档树效果

图(1)点击前

jQuery实现文档树效果

图(2)点击后

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title></title>
 <style>
  *{
   margin:0;
   padding:0;
   list-style: none;
  }
  .box{
   width: 250px;
   height: auto;
   padding: 20px;
   background: lightgrey;
   margin:0 auto;
  }
  .box li{
   line-height: 30px;
   /*注意:height没有被设置,可以根据实际需要自动调整*/
   position: relative;
  }
  .box li em{
   position: absolute;
   left:0;
   top:7px;
   width: 16px;
   height: 16px;
   background-image: url("http://www.qdfuns.com/misc.php?mod=attach&genre=editor&aid=123b5048273b92eb544ad6eb0ed57c44");
   background-size:100%;
   cursor: pointer;
  }
  .box li em.open{
   background-image: url("http://www.qdfuns.com/misc.php?mod=attach&genre=editor&aid=8f89447399822b0294ae590ccc641bf5");
   background-size:100%;
  }
  .box li span{
   padding-left: 20px;
   /*因为span前面的em已经绝对定位,脱离文档流了,所以span的左边界直达 li*/
  }
  .box ul{
   display: none;
  }
  .two{
    margin-left: 20px;
  }
  .three{
   margin-left: 40px;
  }
  .four{
   margin-left: 40px;
  }
  /*ul.box下的li显示,其中有折叠的li加em;
   ul.box下的ul隐藏,其内部的li是没法显示的*/
 </style>
</head>
<body>
<ul class="box">
 <li><em></em><span>第一级第一个</span>
  <ul class="two">
   <li><span>第二级第一个</span></li>
   <li><em></em><span>第二级第二个</span>
    <ul class="three">
     <li><em></em><span>第三级第一个</span>
      <ul class="four">
       <li><span>第四级第一个</span></li>
       <li><span>第四级第二个</span></li>
      </ul>
     </li>
     <li><span>第三级第二个</span></li>
    </ul>
   </li>
   <li><em></em><span>第二级第三个</span>
    <ul class="three">
     <li><span>第三级第一个</span></li>
     <li><span>第三级第二个</span></li>
    </ul>
   </li>
  </ul>
 </li>
 <li><em></em><span>第一级第一个</span>
  <ul class="two">
   <li><span>第二级第一个</span></li>
   <li><em></em><span>第二级第二个</span>
    <ul class="three">
     <li><em></em><span>第三级第一个</span>
      <ul class="four">
       <li><span>第四级第一个</span></li>
       <li><span>第四级第二个</span></li>
      </ul>
     </li>
     <li><span>第三级第二个</span></li>
    </ul>
   </li>
  </ul>
 </li>
</ul>
<script src="http://s0.kuaizhan.com/res/skin/js/lib/jquery-2.0.3.min.js"></script>
<script>
 /*思路:
 * 1.让前面有em的span加上小手效果;
 * 2.点击span or em的时候,看他父容器下是否有ul,如果有,让其显示,否则,隐藏
 * */
 var $box=$('.box');
 var $aSpan=$box.find('span');
 //1.让前面有em的span加上小手效果;
 $aSpan.each(function(index,item){
  //if($(item).prev().length){ $(item).css('cursor','pointer');};思路1:
  $(item).prev('em').next('span').css('cursor','pointer'); //思路2:
 });
 //2.点击span or em的时候,看他父容器下是否有ul,如果有,让其显示,否则,隐藏
 $box.click(function(e){
  //当点击的事件源是em or span的时候,我们看其父级下是否有ul
  // 如果有:展开让其闭合,闭合就让其展开;
  if(e.target.tagName.toLowerCase()=='em' || e.target.tagName.toLowerCase()=='span'){
   var $parent=$(e.target).parent();
   var $ul=$parent.children('ul');
   if($ul){
    if($ul.css('display')=='block'){//展开,让其闭合
     //当闭合的时候,让当前容器下,所有的em都移除open,所有的ul都隐藏;
     $parent.find('ul').hide();
     $parent.find('em').removeClass('open');
    }else{ //闭合让其展开
     $ul.show();
     $parent.children('em').addClass('open');
    }
   }
  }
 })
</script>
</body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript 动态添加表格行
Jun 22 Javascript
javascript获取元素离文档各边距离的方法
Feb 13 Javascript
jquery插件NProgress.js制作网页加载进度条
Jun 05 Javascript
jquery实现模拟百分比进度条渐变效果代码
Oct 29 Javascript
jQuery Mobile中的button按钮组件基础使用教程
May 23 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
js实现一个猜数字游戏
Mar 31 Javascript
node.js操作mysql简单实例
May 25 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
vue中的.$mount('#app')手动挂载操作
Sep 02 Javascript
浅谈JS的二进制家族
May 09 Javascript
js以及jquery实现手风琴效果
Apr 17 #Javascript
写jQuery插件时的注意点
Feb 20 #Javascript
Node.js获取前端ajax提交的request信息
Feb 20 #Javascript
使用JS 插件qrcode.js生成二维码功能
Feb 20 #Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法(二)
Feb 20 #Javascript
Angular在一个页面中使用两个ng-app的方法
Feb 20 #Javascript
You might like
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
用PHP制作的意见反馈表源码
2007/03/11 PHP
PHP strncasecmp字符串比较的小技巧
2011/01/04 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
cookie的复制与使用记住用户名实现代码
2013/11/04 Javascript
在页面上用action传递参数到后台出现乱码的解决方法
2013/12/31 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
Web制作验证码功能实例代码
2017/06/19 Javascript
详解javascript中的变量提升和函数提升
2018/05/24 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
JavaScript 禁止用户保存图片的实现代码
2020/04/28 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
[07:47]DOTA2国际邀请赛采访专栏:探访Valve总部
2013/08/08 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python pickle类库介绍(对象序列化和反序列化)
2014/11/21 Python
在Django中同时使用多个配置文件的方法
2015/07/22 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Python给图像添加噪声具体操作
2019/03/03 Python
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
大学生预备党员自我评价分享
2013/11/16 职场文书
应届毕业生自我鉴定范文
2013/12/27 职场文书
大学生简短的自我评价
2014/09/12 职场文书
社区重阳节活动总结
2015/03/24 职场文书
2015年酒店客房部工作总结
2015/04/25 职场文书
二审代理词范文
2015/05/25 职场文书
现货白银电话营销话术
2015/05/29 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers