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 获取兄弟元素的几种不错方法
May 23 Javascript
深入分析JQuery和JavaScript的异同
Oct 23 Javascript
js模仿php中strtotime()与date()函数实现方法
Aug 11 Javascript
JavaScript的字符串方法汇总
Jul 31 Javascript
纯js实现html转pdf的简单实例(推荐)
Feb 16 Javascript
bootstrap table 多选框分页保留示例代码
Mar 08 Javascript
完美实现js选项卡切换效果(一)
Mar 08 Javascript
JavaScript实现构造json数组的方法分析
Aug 17 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
Feb 27 jQuery
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
如何利用vue+vue-router+elementUI实现简易通讯录
May 13 Javascript
vue-cli3添加模式配置多环境变量的方法
Jun 05 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
实用函数9
2007/11/08 PHP
PHP基础知识回顾
2012/08/16 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
2016/06/13 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
jquery简单插件制作(fn.extend)完整实例
2016/05/24 Javascript
ES2015 Symbol 一种绝不重复的值
2016/12/25 Javascript
javascript表达式和运算符详解
2017/02/07 Javascript
js实现二级导航功能
2017/03/03 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
2017/03/31 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
jquery 插件重新绑定的处理方法分析
2019/11/23 jQuery
python文件与目录操作实例详解
2016/02/22 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
python实现对excel进行数据剔除操作实例
2017/12/07 Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
2019/07/04 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
关于Python 中的时间处理包datetime和arrow的方法详解
2020/03/19 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Pycharm常用快捷键总结及配置方法
2020/11/14 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
安全员岗位职责
2013/11/11 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
公安民警正风肃纪剖析材料
2014/10/10 职场文书
西柏坡导游词
2015/02/05 职场文书
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫