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 相关文章推荐
ECMAScript5中的对象存取器属性:getter和setter介绍
Dec 08 Javascript
js调出上下文菜单的实例
Dec 17 Javascript
JavaScript基于原型链的继承
Jun 22 Javascript
JavaScript获取css行间样式,内连样式和外链样式的简单方法
Jul 18 Javascript
微信公众号 客服接口的开发实例详解
Sep 28 Javascript
js获取指定字符前/后的字符串简单实例
Oct 27 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
Nov 02 Javascript
值得学习的bootstrap fileinput文件上传工具
Nov 08 Javascript
Vue常用指令V-model用法
Mar 08 Javascript
浅析bootstrap原理及优缺点
Mar 19 Javascript
vue2.0+vuex+localStorage代办事项应用实现详解
May 31 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
Jan 16 jQuery
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
PHP HTML代码串截取代码
2008/12/29 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
jquery中常用的SET和GET
2009/01/13 Javascript
Jquery 实现Tab效果 思路是js思路
2010/03/02 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
vue.js利用defineProperty实现数据的双向绑定
2017/04/28 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
快速将Vue项目升级到webpack3的方法步骤
2017/09/14 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
使用vue-infinite-scroll实现无限滚动效果
2018/06/22 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
微信小程序基础教程之worker线程的使用方法
2019/07/15 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
编程语言Python的发展史
2014/09/26 Python
零基础写python爬虫之神器正则表达式
2014/11/06 Python
Linux下用Python脚本监控目录变化代码分享
2015/05/21 Python
分享Python文本生成二维码实例
2016/01/06 Python
ubuntu 16.04下python版本切换的方法
2019/06/14 Python
python打印异常信息的两种实现方式
2019/12/24 Python
Python新手如何理解循环加载模块
2020/05/29 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
全面总结使用CSS实现水平垂直居中效果的方法
2016/03/10 HTML / CSS
伯利陶器:Burleigh Pottery
2018/01/03 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
暑期社会实践学生的自我评价
2014/01/09 职场文书
知识竞赛主持词
2014/03/26 职场文书
五分钟演讲稿
2014/04/30 职场文书
小学生节约用水倡议书
2014/05/15 职场文书
岳庙导游词
2015/02/04 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python