一、基本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. 多种语言socket编程集锦—win32

    原文 http://www.blogjava.net/huyi2006/articles/263831.html 借此地方整理以下socket编程的多种语言的实现,socket可以跨平台的通信,因此多 ...

  2. linux下crontab的使用实现

    1 crontab实现定时任务 1.1服务状态 /sbin/service crond status 查看定时任务的服务是否启动 参数:start 启动服务      Stop 停止服务      R ...

  3. 使用OpenCV玩家营造出一个视频控制(没有声音)

    说明:OpenCV计算机视觉库,所以使用的图像或视频处理,因此,没有任何声音在播放视频的临时 软件:使用OpenCV制播放器(无声音) 功能说明:新建播放窗体.加入进度条能够拖动视频播放. 流程图: ...

  4. SQL点滴34—SQL中的大小写

    原文:SQL点滴34-SQL中的大小写 默认情况下,SQL Server不区分大小写,如果数据表TEST的TNAME列中有数据“abcd”和“Abcd”, 如果使用查询语句:select * from ...

  5. Asp.Net MVC页面静态化功能实现二:用递归算法来实现

    上一篇提到采用IHttpModule来实现当用户访问网站的时候,通过重新定义Response.Filter来实现将返回给客户端的html代码保存,以便用户下一次访问是直接访问静态页面. Asp.Net ...

  6. ASP.NET MVC 中的视图生成

    关于 ASP.NET MVC 中的视图生成 在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Mode ...

  7. ORACLE表建立自增列

    create tablespace studentDBdatafile 'E:\datafiles_1.dbf' size 10m; create user Huang_Ying_Boidentifi ...

  8. 使用MVCJqGrid

    使用MVCJqGrid的心得   最近公司网站进行升级,项目要用.net mvc,mysql和轻量级orm框架dapper.由于美工页面出不来啊,让我先写简单写写后台的列表,同事说用MvcJqGrid ...

  9. Varint code

    Varint编码   LevelDB内部通过采用变长编码,对数据进行压缩来减少存储空间,采用CRC进行数据正确性校验.下面就对varint编码进行学习. 传统的integer是以32位来表示的,存储需 ...

  10. C语言面试问答5

    12个滑稽的C语言面试问答——<12个有趣的C语言问答>评析(5) 前文链接:http://www.cnblogs.com/pmer/archive/2013/09/17/3327262. ...