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 相关文章推荐
Javascript 垃圾收集机制介绍理解
May 14 Javascript
JavaScript实现找出数组中最长的连续数字序列
Sep 03 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
jQuery中:submit选择器用法实例
Jan 03 Javascript
jQuery实现的网页换肤效果示例
Sep 20 Javascript
Javascript中的getter和setter初识
Aug 17 Javascript
JS排序算法之希尔排序与快速排序实现方法
Dec 12 Javascript
微信小程序实现图片上传
May 23 Javascript
生产制造追溯系统之再说条码打印
Jun 03 Javascript
微信小程序实现搜索框功能及踩过的坑
Jun 19 Javascript
vue 在单页面应用里使用二级套嵌路由
Dec 19 Vue.js
深入详解JS函数的柯里化
Jun 09 Javascript
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并发对MYSQL造成压力的解决方法
2013/02/21 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
yii去掉必填项中星号的方法
2015/12/28 PHP
laravel框架与其他框架的详细对比
2019/10/23 PHP
xmlHTTP实例
2006/10/24 Javascript
javascript新手语法小结
2008/06/15 Javascript
javascript sudoku 数独智力游戏生成代码
2010/03/27 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
2011/10/29 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
2013/07/17 Javascript
jquery实现多级下拉菜单的实例代码
2013/10/02 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
javascript中 try catch用法
2015/08/16 Javascript
JS控制伪元素的方法汇总
2016/04/06 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
Bootstrap实现基于carousel.js框架的轮播图效果
2017/05/02 Javascript
vue+iview 兼容IE11浏览器的实现方法
2019/01/07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
[01:55]《走出家门看比赛》——DOTA2 2015国际邀请赛同城线下观战
2015/07/18 DOTA
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
Python中的枚举类型示例介绍
2019/01/09 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
进修护士自我鉴定
2013/10/14 职场文书
2014年三八妇女节活动方案
2014/02/28 职场文书
商铺租赁意向书
2014/04/01 职场文书
感恩教育活动总结
2014/05/05 职场文书
林肯就职演讲稿
2014/05/19 职场文书
新学期开学演讲稿
2014/05/24 职场文书
成绩单评语
2015/01/04 职场文书
运动会表扬稿
2015/01/16 职场文书
2015年中秋节主持词
2015/07/30 职场文书
幼儿园开学家长寄语(2016秋季)
2015/12/03 职场文书
三年级作文之趣事作文
2019/11/04 职场文书
openEuler 搭建java开发环境的详细过程
2022/06/10 Servers