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连接access数据库的方法
Nov 17 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
Nov 08 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
jquery库文件略庞大用纯js替换jquery的方法
Aug 12 Javascript
使用js Math.random()函数生成n到m间的随机数字
Oct 09 Javascript
js实现的牛顿摆效果
Mar 31 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
javascript超过容器后显示省略号效果的方法(兼容一行或者多行)
Jul 14 Javascript
jquery中$.fn和图片滚动效果实现的必备知识总结
Apr 21 jQuery
React Native AsyncStorage本地存储工具类
Oct 24 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 Javascript
原生js实现随机点名
Jul 05 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的yii2框架中整合hbase库的方法
2018/09/20 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
php使用scandir()函数扫描指定目录下所有文件示例
2019/06/08 PHP
Laravel 中使用简单的方法跟踪用户是否在线(推荐)
2019/10/30 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
跟我学Nodejs(二)--- Node.js事件模块
2014/05/21 NodeJs
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
使用jquery组件qrcode生成二维码及应用指南
2015/02/22 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
BootstrapValidator实现注册校验和登录错误提示效果
2017/03/10 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
vue项目部署上线遇到的问题及解决方法
2018/06/10 Javascript
vue elementui 实现搜索栏公共组件封装的实例代码
2020/01/20 Javascript
js 使用ajax设置和获取自定义header信息的方法小结
2020/03/12 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
实例讲解Python中的私有属性
2014/08/21 Python
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python 功能和特点(新手必学)
2015/12/30 Python
详解python 字符串和日期之间转换 StringAndDate
2017/05/04 Python
python查看列的唯一值方法
2018/07/17 Python
Python实现一个数组除以一个数的例子
2019/07/20 Python
python getopt模块使用实例解析
2019/12/18 Python
python各层级目录下import方法代码实例
2020/01/20 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
python3中确保枚举值代码分析
2020/12/02 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
教师演讲稿范文
2014/01/08 职场文书
骨干教师培训方案
2014/05/06 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
图文详解matlab原始处理图像几何变换
2021/07/09 Python