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对象的构造和继承实现代码
Dec 05 Javascript
用jquery.sortElements实现table排序
May 04 Javascript
JavaScript中的ArrayBuffer详细介绍
Dec 08 Javascript
VS2008中使用JavaScript调用WebServices
Dec 18 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
jQuery中hover与mouseover和mouseout的区别分析
Dec 24 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
Jul 21 Javascript
微信小程序 Windows2008 R2服务器配置TLS1.2方法
Dec 05 Javascript
easy ui datagrid 从编辑框中获取值的方法
Feb 22 Javascript
vue递归组件实战之简单树形控件实例代码
Aug 27 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
Aug 13 Javascript
element中Steps步骤条和Tabs标签页关联的解决
Dec 08 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
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
简化php模板页面中分页代码的解析
2009/02/06 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
jQuery Autocomplete自动完成插件
2010/07/17 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
JS实现切换标签页效果实例代码
2013/11/01 Javascript
js调试系列 初识控制台
2014/06/18 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
IE9+已经不对document.createElement向下兼容的解决方法
2015/09/14 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
vue实现购物车抛物线小球动画效果的方法详解
2019/02/13 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
2019/02/26 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
2020/05/06 Javascript
JavaScript 接口原理与用法实例详解
2020/05/12 Javascript
NodeJS和浏览器中this关键字的不同之处
2021/03/03 NodeJs
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
Python使用剪切板的方法
2017/06/06 Python
python实现汽车管理系统
2018/11/30 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
phpquery中文手册
2021/03/18 PHP
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
三陽商会官方网站:Sanyo iStore
2019/05/15 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
设计模式的基本要素是什么
2014/04/21 面试题
小学生安全保证书
2014/02/01 职场文书
合同协议书格式
2014/04/18 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
超市食品安全承诺书
2015/04/29 职场文书
刑事申诉状范文
2015/05/20 职场文书
家长会感言
2015/08/01 职场文书
年会邀请函的格式及范文五篇
2019/11/02 职场文书
Python字符串对齐方法使用(ljust()、rjust()和center())
2021/04/26 Python
vue router 动态路由清除方式
2022/05/25 Vue.js