一、基本HTML和CSS

HTML中产生一、二级导航的代码:

  {loop  $nav  $key  $value}
   <div class=”u_con”>
<span class=” xg_bt active ”>$value[0]</span>
   <ul class=”u_con_list”>
   {loop $sub_nav_list[$key] $k $v}
   <li class=”u_con_item”>
   <a href =”index.php?&view={$key}”>$v[0]</a>
   </li>
   {/loop}
   </ul>
   </div>
  {/loop}

关键CSS代码:

.xg_bt{
display:block;
background:url(lis_03.png) no-repeat 70px 4px;
font-size:12px;color:#666;
font-weight:bold;
padding-left:14px;
margin-bottom:6px;
cursor:pointer;
} .active{
background:url(lis_01.png) no-repeat 70px 4px;
}
 
.u_con_list {
    
display

none
;
    
padding-bottom

12px
;
    
width

100%
;

}

其中:.xg_bt和.active的css样式添加在了所有的一级菜单上面,由于.active样式写在.xg_bt样式之后,它的background属性会覆盖掉.xg_bt中的background属性,其中:lis_01.png是箭头向右的图片,lis_03是箭头向左的图片。.u_con_list中的样式:display:none;是控制初始化的时候,ul列表是默认隐藏的,初始化的时候是这样显示的:

2. Jquery代码解析:

$(document).ready(function(){

	$(".u_con .xg_bt").click(function(){
$(this).toggleClass("active");
$(this).next().toggle();
var index = $(".u_con .xg_bt").index(this);
$(".u_con .xg_bt").each(function(i){
if(i != index){
if($(this).next().css("display")=="block"){
$(this).next().css("display","none");
}
}
});
});
})

$(".u_con .xg_bt").click();这个是选中了所有的一级菜单,让它们监听click事件;

$(this).toggleClass("active");

其中:toggleClass在Jquery手册上是这样描述的:如果存在(不存在)就删除(添加)一个类。也就是控制当我们点击一下一级标题,这个.active类就消失,那个被它覆盖的.xg_bt中的background属性就是发生作用,箭头就会向下。

$(this).next().toggle();

其中:next()在Jquery手册上是这样描述的:取得一个包含匹配的元素集合中每一个元素紧邻的后面同辈元素的元素集合。这个函数只返回后面那个紧邻的同辈元素,而不是后面所有的同辈元素(可以使用nextAll)。 由于$(this)是取得的span这个标签,它的next()就是ul这个标签了。

其中:toggle()在Jquery手册上是这样描述的:切换元素的可见状态;如果元素是可见的,切换为隐藏的;如果元素是隐藏的,切换为可见的。 这也就是控制我们ul的显示,初始化的时候ul的display默认是none,当点击之后就会变成block,从而显示出来。到这一步的效果会是下面这样的:

如果这里到这一步就算了的话,总体实现的效果就是,初始化默认不展开,当点击某个一级标题之后,二级标题列表出现,而且箭头有向右变为向下,当再次点击另一个的时候,另一个也显示出来,但是上一次显示的那个仍然显示,无法隐藏,下面我们要做的就是当点击另一个的时候,将当前已经显示的隐藏掉再显示出当前点击的那个一级标题下的二级标题列表:

var index = $(".u_con .xg_bt").index(this);

其中:index()在Jquery手册中的描述是:搜索匹配的元素,并返回相应元素的索引值,从0开始计数。如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置。 这里我们的目的是要取得我们点击的那个一级标题的索引index。

$(".u_con .xg_bt").each(function(i){});

其中:each()在Jquery手册中的描述是:以每一个匹配的元素作为上下文来执行一个函数。 这个其实也就是相当于一个循环,当我点击一个一级标题的时候,将一级标题列表循环,检查它下面的ul的display的属性,如果是block显示的,就将它隐藏,只显示我当前点击的一级标题下的二级标题列表,这样就实现了我们需要的那个效果。

$(this).next().css("display") == "block";  $(this).next().css("display","none");

其中:css()在Jquery手册中的描述是:css(name):访问第一个匹配元素的样式属性;css(name,value):在所有匹配的元素中,设置一个样式属性的值。

到这里我们的效果就实现了:

现在来苏州了,也要坚持每天的学习,加油!!

Jquery控制点击时一、二级菜单自由隐藏与出现的更多相关文章

  1. jquery垂直展开折叠手风琴二级菜单

    摘要:jquery实现垂直展开二级菜单 最近新开发一个简单项目,用到左侧两级的菜单.找找了手头的文件,竟然没有现成的代码,算了,去网上找找整理下吧. 注:jquery-1.8.3.min.js需要下载 ...

  2. CSS制作二级菜单时,二级菜单与一级菜单不对齐

    效果如图: 部分代码如图: <li><a href="#" target="_blank">关于我们</a> <ul& ...

  3. jquery导航栏高亮(二级菜单点击一级保持高亮)

    <script type="text/javascript"> var urlstr = location.href; var urlstatus=false; $(& ...

  4. “Bootstrap做的响应式菜单在iPhone上点击不了二级菜单“的解决办法!

    只需把把点击的a(被点击的)变成button即可.

  5. Jquery垂直下拉二级菜单

    自己做了一个基于Jquery 的垂直下拉二级菜单功能,直接看图: Html的代码如下: <!DOCTYPE html> <html> <head> <meta ...

  6. Selenium操作示例——鼠标悬停显示二级菜单,再点击二级菜单或下拉列表

    这两天在玩python中selenium,遇到一个问题,就是鼠标移动到页面中某按钮或菜单,自动弹出二级菜单或下拉菜单,再自动点击其中的二级菜单或下拉列表. 首先,手工操作:打开母校的主页 http:/ ...

  7. 【jQuery】smartMenu右键自定义上下文菜单插件(似web QQ)

    (前端用重点整理博客地址)链接地址:http://www.cnblogs.com/atree/archive/2011/06/30/jQuery-smartMenu-javascript.html 一 ...

  8. 做二级菜单时候遇到的关于事件冒泡以及mouseover和mouseenter的不同

    二级菜单作为最普通小组件,我遇到了坑. <style> .wrapper { height: 150px; border: 1px solid; width: 150px; } .wrap ...

  9. jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类

    jQuery 二级菜单,一次显示一个小类 鼠标点击显示小类 本例有另外2个关联案例,演示地址分别为2.php,3.php 演示 XML/HTML Code <div class="ar ...

随机推荐

  1. linux 多个源文件在编译时会产生一个目标文件

    obj-m := target.o target-objs :=  src1.o src2.o src3.o 版权声明:本文博客原创文章.博客,未经同意,不得转载.

  2. Junit指定测试运行顺序

    原文链接: Test execution order原始日期: 2012年12月06日本期: 2014年7月2日翻译人员: 铁锚 说明: Junit4.11版本号及以后才支持,建议升级到最新版本号. ...

  3. 一个简单的dom查询函数

    var regid = /^#([\w-]*)$/, regClass = /^\.([\w-]*)$/, regName = /^(div|a|p|ul|li|input|select|docume ...

  4. Tomcat7.0更改默认的路径来访问自己的项目

    如何使自己的项目没有输入:localhost:8080/项目名称/index.html 能够访问. 步骤,如下面的 : 找到tomcat ---  config----server.xml 选中右键编 ...

  5. ubuntu下Eclipse无法启动

    我的Ubuntu是12.04 LTS版的.jdk是官网下载后解压就可以用的.配置好PATH和CLASSPATH后,双击Eclipse弹出这个窗口: 但是如果通过终端,以命令行的方式执行 ./eclip ...

  6. VMware7安装CentOS6.5教程

    VMware7安装CentOS6.5教程 http://www.91linux.com/html/2014/CentOS_0415/9727.html工欲善其事,必先利其器.学习linux系统,必须先 ...

  7. leetcode[55] Merge Intervals

    题目:给定一连串的区间,要求输出不重叠的区间. Given a collection of intervals, merge all overlapping intervals. For exampl ...

  8. 如何把va_list可变参数传送到下一级函数中(如传送到printf)

    最近我在一个LCD上想实现打印格式化字符串的功能,实现这样的功能可有两种方式: 一 最直接的就是自己去解析类似于printf功能的一个函数: 二 比较简单的方法是使用已有的sprintf功能,把格式化 ...

  9. 【MS SQL】通过执行计划来分析SQL性能

    原文:[MS SQL]通过执行计划来分析SQL性能 如何知道一句SQL语句的执行效率呢,只知道下面3种: 1.通过SQL语句执行时磁盘的活动量(IO)信息来分析:SET STATISTICS IO O ...

  10. 【转】仿QQ5.0侧滑菜单ResideMenu

    本文由孙国威 原创.如需转载,请注明出处! 原文:http://blog.csdn.net/manoel/article/details/39013095 为了后续对这个项目进行优化,比如透明度动画. ...