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对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
Oct 11 Javascript
jQuery $.data()方法使用注意细节
Dec 31 Javascript
浅析LigerUi开发中谨慎载入common.css文件
Jul 09 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
jquery ajax后台返回list,前台用jquery遍历list的实现
Oct 30 Javascript
详解ECMAScript6入门--Class对象
Apr 27 Javascript
Angular 2父子组件之间共享服务通信的实现
Jul 04 Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 Javascript
js中less常用的方法小结
Aug 09 Javascript
javascript基本常用排序算法解析
Sep 27 Javascript
Node.js API详解之 tty功能与用法实例分析
Apr 27 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 flock 文件锁详细介绍
2012/12/29 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
php中最简单的字符串匹配算法
2014/12/16 PHP
Joomla数据库操作之JFactory::getDBO用法
2016/05/05 PHP
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
JS 添加网页桌面快捷方式的代码详细整理
2012/12/27 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
jQuery实现购物车计算价格功能的方法
2015/03/25 Javascript
jQuery $.each遍历对象、数组用法实例
2015/04/16 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
2016/10/10 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
vue-cli3脚手架的配置及使用教程
2018/08/28 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
layui表格 返回的数据状态异常的解决方法
2019/09/10 Javascript
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
Python版名片管理系统
2018/11/30 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
上海方立数码笔试题
2013/10/18 面试题
自我鉴定怎么写
2013/12/05 职场文书
运动会获奖感言
2014/02/11 职场文书
移交协议书
2014/08/19 职场文书
嘉宾邀请函
2015/01/31 职场文书
安阳殷墟导游词
2015/02/10 职场文书
不同意离婚代理词
2015/05/23 职场文书