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 面向对象 function类
May 13 Javascript
jQuery 数据缓存模块进化史详细介绍
Nov 19 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
XML文件转化成NSData对象的方法
Aug 12 Javascript
js实现YouKu的漂亮搜索框效果
Aug 19 Javascript
js实现前端图片上传即时预览功能
Aug 02 Javascript
Layer弹出层动态获取数据的方法
Aug 20 Javascript
JS中验证整数和小数的正则表达式
Oct 08 Javascript
Layui选项卡制作历史浏览记录的方法
Sep 28 Javascript
微信小程序动态添加和删除组件的现实
Feb 28 Javascript
解决vue-photo-preview 异步图片放大失效的问题
Jul 29 Javascript
javascript实现下拉菜单效果
Feb 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中的字符串函数
2006/10/09 PHP
PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
2009/10/22 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
JavaScript判断用户名和密码不能为空的实现代码
2016/05/16 Javascript
原生js三级联动的简单实现代码
2016/06/07 Javascript
jQuery设置单选按钮radio选中/不可用的实例代码
2016/06/24 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
Node.js对MongoDB数据库实现模糊查询的方法
2017/05/03 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
JS异步执行结果获取的3种解决方式
2019/02/19 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
vue+AI智能机器人回复功能实现
2020/07/16 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
Vue为什么要谨慎使用$attrs与$listeners
2020/08/27 Javascript
Python入门学习之字符串与比较运算符
2015/10/12 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python函数参数操作详解
2018/08/03 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
pytorch梯度剪裁方式
2020/02/04 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
深入浅析css3 中display box使用方法
2015/11/25 HTML / CSS
OPPO手机官方商城:中国手机市场出货量第一品牌
2017/10/18 全球购物
普天C++笔试题
2016/03/20 面试题
会计专业毕业生自我鉴定
2013/10/29 职场文书
军训自我鉴定
2014/01/22 职场文书
总经理助理职责
2014/02/04 职场文书
三傻大闹宝莱坞观后感
2015/06/03 职场文书
网络新闻该怎么写?这些写作技巧你都知道吗?
2019/08/26 职场文书