jQuery之选项卡的简单实现


Posted in Javascript onFebruary 28, 2014

jQuery实现选项卡功能。首先将界面搭建好。

有导航头tab_menu,还有内容tab_box。

要实现的效果就是,点击后,将相应的内容显示出来,其他内容隐藏掉。

同时为了展现选中状态,为选中的项添加背景,以示区别。

这一次,我自己写了代码,先看html部分:

<div class="tab">
    <div class="tab_menu">
        <ul>
            <li class="selected">时事</li>
            <li>体育</li>
            <li>娱乐</li>
        </ul>
    </div>
    <div class="tab_box"> 
         <div>时事</div>
         <div class="hide">体育</div>
         <div class="hide">娱乐</div>
    </div>
</div>

html中,需要一个大的div,里面有两个子div,一个作为导航头tab_menu,一个作为内容体tab_box。css代码负责布局html内容。

css部分:

*{
margin:0;
padding:0;
}
.tab{
    width:240px;
    margin:50px;
    /*border:1px solid;*/
}
.tab_menu{
    clear:both;
}
.tab_menu li{
    float:left;  //将导航头左飘
    text-align:center;  //将文字居中
    list-style:none;  //去除标记符号
    background:#F1F1F1; //设置默认背景色
    border:1px solid #898989; //设置边框色
    margin-right:4px; //每个li之间的距离为4px
    cursor:pointer;  //鼠标浮上之后,会有小手的标示出现
    padding:1px 6px; //控制li的内部距离
    border-bottom:none; }
.tab_menu li.hover{
    background:#DFDFDF;
}
.tab_menu li.selected{//为选中的选项加背景与颜色
    color:#FFF; 
    background:#6D84B4;
}
.tab_box{
    clear:both; //清楚float效果的影响
    height:100px; //设置高度为100px
    border:1px solid #898989; //设置内容体的边框样式
}
.hide{//隐藏需要隐藏的内容div
    display:none;
}

待布局完成之后,进行jQuery的动作:
<script type='text/javascript'>
$(function(){
    //1.点击时改变css属性,移除之前的selected选项,添加新的selected选项
    //2.隐藏之前的div层,显示对应得div层
    //为导航中的li注册点击事件
    var $div_li = $(".tab_menu ul li");
    $div_li.click(function(){
        $(this).addClass('selected').siblings().removeClass('selected');
        //var index = $div_li.index(this);
        //$("div.tab_box > div").eq(index).show().siblings().hide();
        var text = $(this).text();
        if(text=='时事')
        {
            $('.tab_box div:contains("时事")').removeClass('hide').siblings().addClass('hide');
        }
        if(text=='体育')
        {
            $('.tab_box div:contains("体育")').removeClass('hide').siblings().addClass('hide');
        }
        if(text=='娱乐')
        {
            $('.tab_box div:contains("娱乐")').removeClass('hide').siblings().addClass('hide');
        }
    }).hover(function(){
            $(this).addClass("hover");
        },function(){
            $(this).removeClass("hover");
        });
});
</script>

这是我写的jQuery代码,我的思路是,点击选项卡时,添加selected样式,同时移除兄弟选项卡的selected样式。

再一个,如何才能触发相应的tab_box中的内容的隐藏与显示呢?

我发现了他们有相对应的内容,就是选项头为“实事”的对应的选项体也为“实事”,选项头为“体育”的对应的选项提也为“体育”等。

我就想,先获取选项头的内容,做出判断,当它为不同的值时,就触发不同的效果。

效果是实现了,可是漏洞很明显,因为并不是所有的选项卡都是标题与内容体相对应。

再看看下面的代码:

<script type="text/javascript" >
//<![CDATA[
    $(function(){
        var $div_li =$("div.tab_menu ul li");
        $div_li.click(function(){
            $(this).addClass("selected")            //当前<li>元素高亮
                   .siblings().removeClass("selected");  //去掉其它同辈<li>元素的高亮
            var index =  $div_li.index(this);  // 获取当前点击的<li>元素 在 全部li元素中的索引。
            $("div.tab_box > div")       //选取子节点。不选取子节点的话,会引起错误。如果里面还有div 
                    .eq(index).show()   //显示 <li>元素对应的<div>元素
                    .siblings().hide(); //隐藏其它几个同辈的<div>元素
        })
    })
//]]>
</script>

这里的处理就特别的巧妙,它通过获取li的索引,对选项体进行处理。它巧妙的利用了一个隐藏的对应关系,就是索引值。

这样即便选项头与选项体内容不对应,一样可以实现联动效果。

通过这次练习,我觉得,自己先动脑子想一想还是很好的。可以发现思路的差异,才能够发现不足,知道差距。有时候甚至你的思路会更好呢!

Javascript 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
JavaScript QueryString解析类代码
Jan 17 Javascript
jquery Tab效果和动态加载的简单实例
Dec 11 Javascript
浅谈Javascript 执行顺序
Dec 18 Javascript
javascript排序函数实现数字排序
Jun 26 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
Nov 18 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
Jan 13 Javascript
vue项目部署上线遇到的问题及解决方法
Jun 10 Javascript
vue使用代理解决请求跨域问题详解
Jul 24 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
Aug 02 Javascript
Vue列表循环从指定下标开始的多种解决方案
Apr 08 Javascript
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
ExtJs纵坐标值重复问题的解决方法
Feb 27 #Javascript
flash遮住div问题的正确解决方法
Feb 27 #Javascript
浏览器窗口加载和大小改变事件示例
Feb 27 #Javascript
js中settimeout方法加参数的使用实例
Feb 27 #Javascript
回车直接实现点击某按钮的效果即触发单击事件
Feb 27 #Javascript
Ajax请求在数据量大的时候出现超时的解决方法
Feb 27 #Javascript
jQuery的live()方法对hover事件的处理示例
Feb 27 #Javascript
You might like
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
PHP生成plist数据的方法
2015/06/16 PHP
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
jQuery ready函数滥用分析
2011/02/16 Javascript
JavaScript实现当网页加载完成后执行指定函数的方法
2015/03/21 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
js发送短信倒计时的简单实现方法
2016/09/08 Javascript
浅谈js内置对象Math的属性和方法(推荐)
2016/09/19 Javascript
Javascript 制作图形验证码实例详解
2016/12/22 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
vue技术分享之你可能不知道的7个秘密
2018/04/09 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
[03:45]Newbee战队出征西雅图 决战2016国际邀请赛
2016/08/02 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
Python urlopen 使用小示例
2008/09/06 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
2015/07/02 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
Osklen官方在线商店:巴西服装品牌
2019/04/25 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
应征英语教师求职信
2013/11/27 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
合作协议书怎么写
2014/04/18 职场文书
校园文明标语
2014/06/13 职场文书
五一促销活动总结
2014/07/01 职场文书
保送生自荐信
2015/03/06 职场文书
文书工作总结(范文)
2019/07/11 职场文书
canvas绘制折线路径动画实现
2021/05/12 Javascript
Java Socket实现多人聊天系统
2021/07/15 Java/Android