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 相关文章推荐
jquery多浏览器捕捉回车事件代码
Jun 22 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
简介JavaScript中search()方法的使用
Jun 06 Javascript
完美解决IE9浏览器出现的对象未定义问题
Sep 29 Javascript
angularjs实现简单的购物车功能
Sep 21 Javascript
jQuery实现的老虎机跑动效果示例
Dec 29 jQuery
基于vue框架手写一个notify插件实现通知功能的方法
Mar 31 Javascript
利用Bootstrap Multiselect实现下拉框多选功能
Apr 08 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
jQuery中DOM常见操作实例小结
Aug 01 jQuery
微信小程序背景音乐开发详解
Dec 12 Javascript
在vue中使用Base64转码的案例
Aug 07 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扩展开发经验分享
2012/09/06 PHP
Smarty实现页面静态化(生成HTML)的方法
2016/05/23 PHP
PHP进程通信基础之信号
2017/02/19 PHP
让iframe框架网页在任何浏览器下自动伸缩
2006/08/18 Javascript
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
javascript 跨浏览器开发经验总结(五) js 事件
2010/05/19 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
24款非常有用的 jQuery 插件分享
2011/04/06 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
NodeJS 实现多语言的示例代码
2018/09/11 NodeJs
angularjs下ng-repeat点击元素改变样式的实现方法
2018/09/12 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
Python中bisect的用法
2014/09/23 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
需要知道的CSS3动画技术
2010/01/01 HTML / CSS
HTML5 DeviceOrientation实现手机网站摇一摇功能代码实例
2015/04/24 HTML / CSS
银行财务部实习生的自我鉴定
2013/11/27 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
应届毕业生求职信范文
2014/07/07 职场文书
个人作风建设剖析材料
2014/10/11 职场文书
2014年服务员工作总结
2014/11/18 职场文书
2015毕业生实习工作总结
2014/12/12 职场文书
英语复习计划
2015/01/19 职场文书
社区母亲节活动总结
2015/02/10 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
办公室日常管理制度
2015/08/04 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL
MySQL三种方式实现递归查询
2022/04/18 MySQL
Linux中各个目录的作用与内容
2022/06/28 Servers
windows server2016安装oracle 11g的图文教程
2022/07/15 Servers