一、基本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. jQuery.extend()源码解读

    // extend方法为jQuery对象和init对象的prototype扩展方法// 同时具有独立的扩展普通对象的功能jQuery.extend = jQuery.fn.extend = funct ...

  2. ubuntu eclipse android搭建

    1.eclipse加入android adt: 终端:sudo gedit /etc/hosts 加入: #for android 173.194.72.93 dl.google.com 173.19 ...

  3. HDU 3094 A tree game 树删边游戏

    叶节点SG值至0 非叶节点SG值至于它的所有子节点SG值添加1 XOR和后 #include <cstdio> #include <cstring> #include < ...

  4. 关于session_start()这个问题

    关于session_start()这个问题,其实网上很多解决的方法,论坛也好多人回答这类的问题, 现在的状况是依然有警告提示Warning: session_start() [function.ses ...

  5. php中des加密解密 匹配C#des加密解密 对称加密

    原文:php中des加密解密 匹配C#des加密解密 对称加密 网上找来的 php des加密解密 完全匹配上一篇C# 字符串加密解密函数  可以用于C#和php通信 对数据进行加密,其中$key 是 ...

  6. SQL点滴31—SQL语句中@@IDENTITY和@@ROWCOUNT区别

    原文:SQL点滴31-SQL语句中@@IDENTITY和@@ROWCOUNT区别 SQL语句中@@IDENTITY和@@ROWCOUNT区别 在一条 INSERT.SELECT INTO 或大容量复制 ...

  7. CSS3 Media Queries 详细介绍与使用方法

    Media Queries 就是要在支援CSS3 的浏览器中才能正常工作,IE8 以下不支持. 而Media Queries 的套用方法千变万化,要套用在什么样的装置中,都可以自己来定义. 到底什么是 ...

  8. Windows Azure VM两shut down 道路

    今天调查Azure当价格,找到下面的语句,来自http://azure.microsoft.com/en-us/pricing/details/virtual-machines/ * If my de ...

  9. 非接触式电子音乐控制器CHIMAERA

    本篇文章,我将介绍个有意思的设备. 她就是Chimaera,一个基于电磁场效应的非接触式电子音乐控制器. <弹奏Chimaera的声音> 霍尔效应传感器阵列及其周围部件组成了一个连续的2D ...

  10. Building Modern Web Apps-构建现代的 Web 应用程序

    Building Modern Web Apps-构建现代的 Web 应用程序 视频长度:1 小时左右 视频作者:Scott Hunter 和 Scott Hanselman 视频背景:Visual ...