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 相关文章推荐
js操作模态窗口及父子窗口间相互传值示例
Jun 09 Javascript
实例讲解JQuery中this和$(this)区别
Dec 08 Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
微信小程序链接传参并跳转新页面
Nov 29 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
Apr 25 Javascript
微信小程序 input输入及动态设置按钮的实现
Oct 27 Javascript
浅谈super-vuex使用体验
Jun 25 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
Jul 24 Javascript
使用layer弹窗提交表单时判断表单是否输入为空的例子
Sep 26 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 Javascript
JS实现判断移动端PC端功能
Feb 21 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 时间计算问题小结
2009/01/04 PHP
php实现图片添加水印功能
2014/02/13 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
JavaScript 产生不重复的随机数三种实现思路
2012/12/13 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
2014/01/06 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
JS+CSS实现的简单折叠展开多级菜单效果
2015/09/12 Javascript
跟我学习javascript的循环
2015/11/18 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
Vue实现table上下移动功能示例
2019/02/21 Javascript
详解vue-cli 脚手架 安装
2019/04/16 Javascript
JavaScript判断浏览器运行环境的详细方法
2019/06/30 Javascript
Element Backtop回到顶部的具体使用
2020/07/27 Javascript
浅谈vue-props的default写不写有什么区别
2020/08/09 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
用Python实现一个简单的能够发送带附件的邮件程序的教程
2015/04/08 Python
一些Python中的二维数组的操作方法
2015/05/02 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Django基础三之视图函数的使用方法
2019/07/18 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python实现静态服务器
2019/09/05 Python
python 实现视频 图像帧提取
2019/12/10 Python
教师求职自荐信范文
2015/03/04 职场文书
社团招新宣传语
2015/07/13 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
职场新人刚入职工作总结该怎么写?
2019/05/15 职场文书
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
Java实现经典游戏泡泡堂的示例代码
2022/04/04 Java/Android