javascript实现树形菜单的方法


Posted in Javascript onJuly 17, 2015

本文实例讲述了javascript实现树形菜单的方法。分享给大家供大家参考。具体如下:

var ME={
  ini:{i:true,d:{},d1:{},h:0,h1:0,h2:0},
  html:function(da,f){
    var s='<ul'+(f?' class="f"':'')+'>';
    for(var i=0,l=da.length;i<l;i++){
      if(typeof(da[i].pid)=='object'){
        s+='<li><button type="button" class="'+(i==0&&this.ini.i?'s1':(i+1==l?'s5':'s3'))+'" onclick="ME.yc(this)"></button><span><button type="button" class="r1"></button><a href="javascript:;">'+da[i].ming+'</a></span>';
        this.ini.i=false;
        s+=this.html(da[i].pid,(i+1==l));
      }else{
        s+='<li><button type="button" class="'+(i+1==l?'e3':'e1')+'"></button><span><button type="button" class="m1"></button><a href="https://3water.com" target="mainFrame">'+da[i].ming+'</a></span>';
      }
      s+='</li>';
    }
    s+='</ul>';
    return s;
  },
  st:function(id,da){
    document.getElementById(id).innerHTML=this.html(da);
  },
  yc:function(a){
    var s=a.className.substr(1);
    if(s%2){
      this.ini.d=a.parentNode.children[2];
      this.ini.h1=this.hei(this.ini.d);
      this.ini.h3=this.ini.h1/10;
      this.yc1(1);
      a.className='s'+(parseInt(s)+1);
      a.parentNode.children[1].children[0].className='r2';
      var ol=a.parentNode.parentNode._;
      if(typeof(ol)=='object'){
        this.ini.d1=ol;
        this.ini.h=ol.offsetHeight;
        this.ini.h2=this.ini.h/10;
        this.yc2(1);
        ol.parentNode.children[0].className='s'+(parseInt(ol.parentNode.children[0].className.substr(1))-1);
        ol.parentNode.children[1].children[0].className='r1';
      }
      a.parentNode.parentNode._=a.parentNode.children[2];
    }else{
      this.ini.d1=a.parentNode.children[2];
      this.ini.h=this.ini.d1.offsetHeight;
      this.ini.h2=this.ini.h/10;
      this.yc2(1);
      a.className='s'+(parseInt(s)-1);
      a.parentNode.children[1].children[0].className='r1';
      a.parentNode.parentNode._='';
    }
  },
  yc1:function(b){
    var h1=ME.ini.h1-(11/(b+1)-1)*ME.ini.h3;
    with(ME.ini.d.style){
      height=h1+'px';
      display='block';
    }
    if(b<10){
    setTimeout('ME.yc1('+(b+1)+')',25);
    }else{
    ME.ini.d.style.display='block';
    ME.ini.d.style.height='';
    }
  },
  yc2:function(b){
    var h1=(11/(b+1)-1)*ME.ini.h2;
    with(ME.ini.d1.style){
      height=h1+'px';
    }
    if(b<10){
    setTimeout('ME.yc2('+(b+1)+')',25);
    }else{
    ME.ini.d1.style.display='';
    ME.ini.d1.style.height='';
    }
  },
  hei:function(a){
    var b=a.cloneNode(true);
    b.style.position='absolute'; 
    b.style.display='block'; 
    b.style.visibility='hidden';
    a.parentNode.appendChild(b);
    var h=b.offsetHeight;
    a.parentNode.removeChild(b);
    return h;
  }
}

希望本文所述对大家的javascript程序设计有所帮助。

Javascript 相关文章推荐
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
Sep 22 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
JavaScript+html5 canvas制作的百花齐放效果完整实例
Jan 26 Javascript
AngularJS 入门教程之HTML DOM实例详解
Jul 28 Javascript
用jquery获取自定义的标签属性的值简单实例
Sep 17 Javascript
angular-cli修改端口号【angular2】
Apr 19 Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
vue-resource + json-server模拟数据的方法
Nov 02 Javascript
微信小程序Getuserinfo解决方案图解
Aug 24 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
Jul 21 Javascript
vue v-on:click传递动态参数的步骤
Sep 11 Javascript
JSON与XML优缺点对比分析
Jul 17 #Javascript
浅谈jQuery的offset()方法及示例分享
Jul 17 #Javascript
JavaScript用select实现日期控件
Jul 17 #Javascript
纯javascript制作日历控件
Jul 17 #Javascript
javascript生成不重复的随机数
Jul 17 #Javascript
jQuery实现径向动画菜单效果
Jul 17 #Javascript
jquery合并表格中相同文本的相邻单元格
Jul 17 #Javascript
You might like
日本十大科幻动漫 宇宙骑士垫底,第一已成经典
2020/03/04 日漫
世界上第一台立体声收音机
2021/03/01 无线电
PHP 和 MySQL 基础教程(二)
2006/10/09 PHP
php 格式化数字的时候注意数字的范围
2010/04/13 PHP
Youku 视频绝对地址获取的方法详解
2013/06/26 PHP
跟我学Laravel之路由
2014/10/15 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
4种Windows系统下Laravel框架的开发环境安装及部署方法详解
2020/04/06 PHP
JS支持带x身份证号码验证函数
2008/08/10 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
页面装载js及性能分析方法介绍
2014/03/21 Javascript
jQuery验证插件 Validate详解
2014/11/20 Javascript
JavaScript:Array类型全面解析
2016/05/19 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
详解nodeJS中读写文件方法的区别
2017/03/06 NodeJs
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
Vue 仿QQ左滑删除组件功能
2018/03/12 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
全面解析JavaScript Module模式
2020/07/24 Javascript
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
python 回调函数和回调方法的实现分析
2016/03/23 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
2017/01/24 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
英国家用电器购物网站:Hughes
2018/02/23 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
LightInTheBox法国站:中国跨境电商
2020/03/05 全球购物
留学推荐信写作指南
2014/01/25 职场文书
优秀应届本科生求职信
2014/07/19 职场文书
2016年会开场白台词
2015/06/01 职场文书
2016年大学生寒假社会实践心得体会
2015/10/09 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
Unity连接MySQL并读取表格数据的实现代码
2021/06/20 MySQL
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS