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 相关文章推荐
简单JS代码压缩器
Oct 12 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
Jun 13 Javascript
JQuery Highcharts 动态生成图表的方法
Nov 15 Javascript
javascript数组去重方法汇总
Apr 23 Javascript
jQuery实现的点赞随机数字显示动画效果(附在线演示与demo源码下载)
Dec 31 Javascript
第六章之辅组类与响应式工具
Apr 25 Javascript
jquery点击回车键实现登录效果并默认焦点的方法
Mar 09 jQuery
webstorm中vue语法的支持详解
May 09 Javascript
详解js类型判断
May 22 Javascript
angularjs $http调用接口的方式详解
Aug 13 Javascript
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
借助云开发实现小程序短信验证码的发送
Jan 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插件 HTMLPurifier HTML解析器
2013/07/01 PHP
Zend Guard使用指南及问题处理
2015/01/07 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
laravel异步监控定时调度器实例详解
2019/06/21 PHP
使用Apache的rewrite
2021/03/09 Servers
用jscript实现列出安装的软件列表
2007/06/18 Javascript
IFrame跨域高度自适应实现代码
2012/08/16 Javascript
A标签中通过href和onclick传递的this对象实现思路
2013/04/19 Javascript
jquery使用ul模拟select实现表单美化的方法
2015/08/18 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
利用JS判断鼠标移入元素的方向
2016/12/11 Javascript
ES6中let 和 const 的新特性
2018/09/03 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
2019/05/07 Javascript
vue项目实现图片上传功能
2019/12/23 Javascript
详解JavaScript数据类型和判断方法
2020/09/04 Javascript
详解Vue3 Teleport 的实践及原理
2020/12/02 Vue.js
Python中的filter()函数的用法
2015/04/27 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python三引号输出方法
2019/02/27 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
Python抖音快手代码舞(字符舞)的实现方法
2021/02/07 Python
linux面试题参考答案(8)
2016/04/19 面试题
旅游管理毕业生自荐信
2013/11/05 职场文书
办公室文员工作自我评价
2013/12/01 职场文书
实习老师离校感言
2014/02/03 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
施工安全汇报材料
2014/08/17 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
2015年春节标语口号
2014/12/09 职场文书
高中生物教学反思
2016/02/20 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
详解Golang如何实现支持随机删除元素的堆
2022/09/23 Python