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 的 prototype问题。
Jan 03 Javascript
借用Google的Javascript API Loader来加速你的网站
Jan 28 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 06 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
Oct 17 Javascript
JavaScript中setInterval的用法总结
Nov 20 Javascript
Underscore源码分析
Dec 30 Javascript
JS实现PC手机端和嵌入式滑动拼图验证码三种效果
Feb 15 Javascript
JS面向对象的程序设计相关知识小结
May 26 Javascript
简化版的vue-router实现思路详解
Oct 19 Javascript
小程序实现列表点赞功能
Nov 02 Javascript
微信小程序 组件的外部样式externalClasses使用详解
Sep 06 Javascript
jQuery实现图片切换效果
Oct 19 jQuery
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批量去除BOM头内容信息代码
2016/03/11 PHP
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
php下的原生ajax请求用法实例分析
2020/02/28 PHP
番茄的表单验证类代码修改版
2008/07/18 Javascript
jquery autocomplete自动完成插件的的使用方法
2010/08/07 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
javascript工厂方式定义对象
2014/12/26 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
vue实现登陆登出的实现示例
2017/09/15 Javascript
vue项目中跳转到外部链接的实例讲解
2018/09/20 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
JS定时器如何实现提交成功提示功能
2020/06/12 Javascript
python获取豆瓣电影简介代码分享
2014/01/16 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
浅谈django的render函数的参数问题
2018/10/16 Python
python异步存储数据详解
2019/03/19 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
2019/04/01 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
opencv python 对指针仪表读数识别的两种方式
2021/01/14 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
HTML5 Canvas实现文本对齐的方法总结
2016/03/24 HTML / CSS
Supersmart英国:欧洲市场首批食品补充剂供应商之一
2018/05/05 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
《小蝌蚪找妈妈》教学反思
2014/02/21 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
2015年社区矫正工作总结
2015/04/21 职场文书
2015年出纳工作总结与计划
2015/05/18 职场文书
素质教育培训心得体会
2016/01/19 职场文书
python四种出行路线规划的实现
2021/06/23 Python