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事件串连执行多个处理过程的方法
Mar 09 Javascript
基于jquery的监控数据是否发生改变
Apr 11 Javascript
页面实时更新时间的JS实例代码
Dec 18 Javascript
jquery xMarquee实现文字水平无缝滚动效果
Apr 29 Javascript
兼容Firefox的Javascript XSLT 处理XML文件
Dec 31 Javascript
JavaScript基础语法之js表达式
Jun 07 Javascript
Easyui的组合框的取值与赋值
Oct 28 Javascript
JS实现按钮控制计时开始和停止功能
Jul 27 Javascript
js实时监控文本框输入字数的实例代码
Jan 18 Javascript
JavaScript实现职责链模式概述
Jan 25 Javascript
基于ssm框架实现layui分页效果
Jul 27 Javascript
jquery html添加元素/删除元素操作实例详解
May 20 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中的integer类型使用分析
2010/07/27 PHP
PHP超级全局变量数组小结
2012/10/04 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
通过JAVAScript实现页面自适应
2007/01/19 Javascript
Save a File Using a File Save Dialog Box
2007/06/18 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
jQuery1.6 使用方法一
2011/11/23 Javascript
6款新颖的jQuery和CSS3进度条插件推荐
2013/03/05 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
js获取指定日期前后的日期代码
2013/08/20 Javascript
详解JavaScript编程中正则表达式的使用
2015/10/25 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
vue小图标favicon不显示的解决方案
2017/09/19 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
9种使用Chrome Firefox 自带调试工具调试javascript技巧
2017/12/22 Javascript
element-ui的回调函数Events的用法详解
2018/10/16 Javascript
如何基于vue-cli3.0构建功能完善的移动端架子
2019/04/24 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python3实现的简单三级菜单功能示例
2019/03/12 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
俄罗斯三星品牌商店:GalaxyStore
2020/11/04 全球购物
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
局火灾防控工作方案
2014/05/25 职场文书
临时租车协议范本
2014/09/23 职场文书
工会2014法制宣传日活动总结
2014/11/01 职场文书
公司员工安全协议书
2014/11/21 职场文书
乔迁新居祝福语
2019/11/04 职场文书
Centos环境下Postgresql 安装配置及环境变量配置技巧
2021/05/18 PostgreSQL
mysql事务隔离级别详情
2021/10/24 MySQL
字节飞书面试promise.all实现示例
2022/06/16 Javascript