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 相关文章推荐
srcElement表格样式
Sep 03 Javascript
Ajax::prototype 源码解读
Jan 22 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
Jquery.Form 异步提交表单的简单实例
Mar 03 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
Jan 13 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
Dec 07 Javascript
全面理解闭包机制
Jul 11 Javascript
react实现一个优雅的图片占位模块组件详解
Oct 30 Javascript
Vue自定义弹窗指令的实现代码
Aug 13 Javascript
Vue.js的动态组件模板的实现
Nov 26 Javascript
javascript实现异形滚动轮播
Nov 28 Javascript
JavaScript中作用域链的概念及用途讲解
Aug 06 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读取mssql json数据中文乱码的解决办法
2016/04/11 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
兼容Mozilla必须知道的知识。
2007/01/09 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
JavaScript DOM元素尺寸和位置
2015/04/13 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
jQuery插件ajaxFileUpload异步上传文件
2016/10/19 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
详解Angualr 组件间通信
2017/01/21 Javascript
jQuery实现手机号正则验证输入及自动填充空格功能
2018/01/02 jQuery
ES6与CommonJS中的模块处理的区别
2018/06/13 Javascript
基于vue展开收起动画的示例代码
2018/07/05 Javascript
webpack4之如何编写loader的方法步骤
2019/06/06 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
2019/07/16 jQuery
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
JS数组及对象遍历方法代码汇总
2020/06/16 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
Python 内置函数complex详解
2016/10/23 Python
详细解读tornado协程(coroutine)原理
2018/01/15 Python
代码分析Python地图坐标转换
2018/02/08 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python处理“
2019/06/10 Python
Python分析彩票记录并预测中奖号码过程详解
2019/07/09 Python
python3.7 openpyxl 删除指定一列或者一行的代码
2019/10/08 Python
Python爬取豆瓣视频信息代码实例
2019/11/16 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
财务经理岗位职责
2013/11/09 职场文书
项目负责人任命书
2014/06/04 职场文书
艾滋病宣传标语
2014/06/25 职场文书
2016高考冲刺决心书
2015/09/23 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Vue3.0 手写放大镜效果
2021/07/25 Vue.js
django项目、vue项目部署云服务器的详细过程
2022/07/23 Servers