javascript下拉列表菜单的实现方法


Posted in Javascript onNovember 18, 2015

之前写过这个《javascript下拉列表中显示树形菜单的实现方法》菜单的体现,但是在写了之后就发现了,不太适合,高度要精准控制,并且还不是很好看。现在采用table来封装,我们知道table的每一行写满了之后,下一行会自动加,这个比之前我们自己制定高度好很多。
1、点击之后都可以并存的情况(只需函数写法不一样就可)
dispaly也是自己设置的,通过父节点来操作子节点,显示与否;

/* function open1(node){ 
   
   //通过父节点来操作兄弟节点 
    
   当点击之后出现之后,直接就能打开但是要求在点开一个时候,其余的都关掉 
 
    var nodes = node.parentNode; 
    var nn = nodes.getElementsByTagName("ul")[0]; 
    with (nn.style) { 
     display = (display == "block") ? "none" : "block"; 
    } 
   }*/ 
   </script>

2、点击之后只允许打开一个,其余的都要关掉

<script type="text/javascript"> 
    function list1(node){ 
    //这是要对全部操作,必须要得到所有的对象 (根据table 的id 来获得) 
    //根据this判断,不是属于this,那么就关闭 
    //alert("aa"); 
    //1,获得点击对象的值 
    var nodes = node.parentNode;//传入当前的父节点 
    var nn = nodes.getElementsByTagName("ul")[0];//得到当前的对象,要是遍历所有,与这个对象一样,就设置相反的情况,其余的全部关闭 
    //2,获得全部对象 
    var mm = document.getElementById("menuid"); 
    var names = mm.getElementsByTagName("ul"); 
     
    //3,开始一一配对 
    for (var x = 0; x < names.length; x++) { 
     /*这样写,可以简化,利用下面的方法 
      if (names[x] == nn) { 
      if (nn.className == "open2") { 
       nn.className = "close2"; 
      } 
      else { 
       nn.className = "open2"; 
      } 
     }else { 
      nn.className = "close2"; 
     }*/ 
     if(names[x]==nn&&names[x].className!="open2"){ 
       nn.className="open2"; 
     }else{ 
       names[x].className="close2"; 
     } 
    } 
   } 
 </script>

 css样式的编写:

<style type="text/css"> 
  ul{ 
   list-style:none; 
   margin:0px; 
   padding:0px; 
  } 
  table{ 
   border:#00ff40 solid 1px; 
  } 
  table a{ 
   text-decoration:none; 
  } 
  table tr td ul{ 
   display:none; 
  } 
  .open2{ 
   display:block; 
   background:#8080ff; 
  } 
  .close2{ 
   display:none; 
  }

效果图(只能开一个的):

javascript下拉列表菜单的实现方法

javascript下拉列表菜单的实现方法

完整代码:

<!DOCTYPE html> 
<html> 
 <head> 
 <title>qqMenu.html</title> 
 <style type="text/css"> 
  ul{ 
   list-style:none; 
   margin:0px; 
   padding:0px; 
  } 
  table{ 
   border:#00ff40 solid 1px; 
  } 
  table a{ 
   text-decoration:none; 
  } 
  table tr td ul{ 
   display:none; 
  } 
  .open2{ 
   display:block; 
   background:#8080ff; 
  } 
  .close2{ 
   display:none; 
  } 
 </style> 
 <script type="text/javascript"> 
  /* function open1(node){ 
   
   //通过父节点来操作兄弟节点 
    
   当点击之后出现之后,直接就能打开但是要求在点开一个时候,其余的都关掉 
 
    var nodes = node.parentNode; 
    var nn = nodes.getElementsByTagName("ul")[0]; 
    with (nn.style) { 
     display = (display == "block") ? "none" : "block"; 
    } 
   }*/ 
   </script> 
   <script type="text/javascript"> 
    function list1(node){ 
    //这是要对全部操作,必须要得到所有的对象 (根据table 的id 来获得) 
    //根据this判断,不是属于this,那么就关闭 
    //alert("aa"); 
    //1,获得点击对象的值 
    var nodes = node.parentNode;//传入当前的父节点 
    var nn = nodes.getElementsByTagName("ul")[0];//得到当前的对象,要是遍历所有,与这个对象一样,就设置相反的情况,其余的全部关闭 
    //2,获得全部对象 
    var mm = document.getElementById("menuid"); 
    var names = mm.getElementsByTagName("ul"); 
     
    //3,开始一一配对 
    for (var x = 0; x < names.length; x++) { 
     /*这样写,可以简化,利用下面的方法 
      if (names[x] == nn) { 
      if (nn.className == "open2") { 
       nn.className = "close2"; 
      } 
      else { 
       nn.className = "open2"; 
      } 
     }else { 
      nn.className = "close2"; 
     }*/ 
     if(names[x]==nn&&names[x].className!="open2"){ 
       nn.className="open2"; 
     }else{ 
       names[x].className="close2"; 
     } 
    } 
   } 
 </script> 
  
 <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> 
 </head> 
 
 <body > 
 <table id="menuid"> 
  <tr> 
   <td> 
    <!--<a href="javascript:void(0)" onclick="open1(this)">同事栏</a>--> 
    <a href="javascript:void(0)" onclick="list1(this)">同事栏</a> 
    <ul > 
     <li>同事1</li> 
     <li>同事2</li> 
     <li>同事3</li> 
     <li>同事4</li> 
    </ul> 
     
   </td> 
  </tr> 
  <tr> 
   <td> 
    <!--<a href="javascript:void(0)" onclick="open1(this)">同学栏</a>--> 
    <a href="javascript:void(0)" onclick="list1(this)">同学栏</a> 
    <ul> 
     <li>同学1</li> 
     <li>同学2</li> 
     <li>同学3</li> 
     <li>同学4</li> 
    </ul> 
   </td> 
  </tr> 
  <tr> 
   <td> 
    <!--<a href="javascript:void(0)" onclick="open1(this)">黑名单栏</a>--> 
    <a href="javascript:void(0)" onclick="list1(this)">黑名单栏</a> 
    <ul> 
     <li>黑名单同学1</li> 
     <li>黑名单同学2</li> 
     <li>黑名单同学3</li> 
     <li>黑名单同学4</li> 
    </ul> 
   </td> 
  </tr> 
  
 </table> 
 </body> 
</html>

相信大家通过这两篇文章的介绍应该有了大概的思路,小编的这篇文章有些制作的效果略微简陋,大家可以再进一步的完善。

Javascript 相关文章推荐
javascript一些不错的函数脚本代码
Sep 10 Javascript
javascript 窗口加载蒙板 内嵌网页内容
Nov 19 Javascript
jQuery 下拉列表 二级联动插件分享
Mar 29 Javascript
JavaScript中的变量作用域介绍
Dec 31 Javascript
基于jquery实现智能提示控件intellSeach.js
Mar 17 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
Dec 23 Javascript
原生js实现无限循环轮播图效果
Jan 20 Javascript
浅谈jquery拼接字符串效率比较高的方法
Feb 22 Javascript
移动端触屏幻灯片图片切换插件idangerous swiper.js
Apr 10 Javascript
基于vuejs实现一个todolist项目
Apr 11 Javascript
JS数组的高级使用方法示例小结
Mar 14 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
May 06 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 #Javascript
详解JavaScript中常用的函数类型
Nov 18 #Javascript
JavaScript如何动态创建table表格
Aug 02 #Javascript
javascript中字体浮动效果的简单实例演示
Nov 18 #Javascript
jQuery EasyUI 布局之动态添加tabs标签页
Nov 18 #Javascript
如何使用jquery easyui创建标签组件
Nov 18 #Javascript
JavaScript严格模式详解
Nov 18 #Javascript
You might like
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
深入php-fpm的两种进程管理模式详解
2013/06/03 PHP
采用ThinkPHP中F方法实现快速缓存实例
2014/06/13 PHP
解决nginx不支持thinkphp中pathinfo的问题
2015/07/21 PHP
PHP链表操作简单示例
2016/10/15 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
js去除浏览器默认底图的方法
2015/06/08 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
JavaScript中的数据类型转换方法小结
2015/10/26 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
直接拿来用的页面跳转进度条JS实现
2016/01/06 Javascript
JS函数定义方式的区别介绍
2016/03/22 Javascript
深入理解jquery跨域请求方法
2016/05/18 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
JS实现的JSON数组去重算法示例
2018/04/11 Javascript
axios使用拦截器统一处理所有的http请求的方法
2018/11/02 Javascript
[04:22]DOTA2大事件之护国神翼
2020/08/14 DOTA
python缩进区别分析
2014/02/15 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
python标准库os库的函数介绍
2020/02/12 Python
python实现对变位词的判断方法
2020/04/05 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
python安装及变量名介绍详解
2020/12/12 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
一款纯css3实现的漂亮的404页面的实例教程
2014/11/27 HTML / CSS
本科毕业生自荐信
2014/05/26 职场文书
五五普法心得体会
2014/09/04 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
React如何创建组件
2021/06/27 Javascript
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs
Redis keys命令的具体使用
2022/06/05 Redis