原生js实现tab选项卡切换


Posted in Javascript onMarch 23, 2020

本文实例为大家分享了原生js实现tab选项卡切换效果的代码,供大家参考,具体内容如下

1.html部分

<body>
 <div id="tab">
 <div class="tab_menu">
 <ul>
 <li class="selected"><a href="#">时事</a></li>
 <li><a href="#">体育</a></li>
 <li><a href="#">娱乐</a></li>
 </ul>
 </div>
 <div class="tab_box">
 <div>时事</div>
 <div class="hide">体育</div>
 <div class="hide">娱乐</div>
 </div>
 </div>
 </body>

2.css部分:样式部分实现方法多种多样,这是我写的简单的demo,我最不擅长的css ><...

.tab_menu .selected{background-color:#aaa;}
 .tab_menu ul{height:30px;}
 .tab_menu ul li{float:left;list-style:none;width:50px;height:30px;color:#000;border:solid 1px gray;border-bottom:none; text-align:center;line-height:30px;margin-right:3px;}
 .tab_menu ul li a{text-decoration:none;}
 .tab_box{width:170px;height:150px;border:solid 1px gray;}
 .tab_box .hide{display:none;}

3.重要的js部分:

window.onload=function(){
 var oTab=document.getElementById('tab');
 var aLi=oTab.getElementsByTagName('li');
 var oTabBox=oTab.getElementsByTagName('div')[1];
 var aBox=oTabBox.getElementsByTagName('div');
 for(var i=0;i<aLi.length;i++){
 aLi[i].index=i;
 aLi[i].onclick=function(){
 for(var j=0;j<aLi.length;j++){
 aLi[j].className='';//取消菜单样式
 aBox[j].className='hide';//隐藏所有的tabDiv
 }
 aLi[this.index].className='selected';
 aBox[this.index].className='';
 }
 }
 }

原生js实现tab选项卡切换 

这个简单粗暴,完全没有考虑如果tabMenu、tabBox有多个样式的情况,不适应项目只是一个思路。很多地方需要完善。下面考虑标签多个class的情况,不过一般都有多个class,现在就要用到去除某个class,添加class的技能了。

3.1原生js中class的添加及删除。

window.onload=function(){
 var oTab=document.getElementById('tab');
 var aLi=oTab.getElementsByTagName('li');
 var oTabBox=oTab.getElementsByTagName('div')[1];
 var aBox=oTabBox.getElementsByTagName('div');
 for(var i=0;i<aLi.length;i++){
 aLi[i].index=i;
 aLi[i].onclick=function(){
 for(var j=0;j<aLi.length;j++){
 var aClass=aLi[j].className.split(' ');//元素.className是一个字符串,切割成数组
 var aClass1=aBox[j].className.split(' ');//同样的方法得到box的
 for(var z=0;z<aClass.length;z++){
 if(aClass[z]=='selected'){
  aClass.splice(z,1);//利用数组的splice方法删除找到的这个类
 }
 }
 for(var k=0;k<aClass1.length;k++){
 if(aClass1[k]=='hide'){
  aClass1.splice(k,1);
 }
 }
 aLi[j].className=aClass.join(' ');//所有的menu都去除selected样式
 aBox[j].className+=' hide';//所有box都隐藏
 aBox[this.index].className=aClass1.join(' ');//当前box显示
 aLi[this.index].className+=' selected';//当前menu添加select样式
 }
 
 }
 }
 }

亲测有效,不过都写在一个方法里有点乱,而且类多的时候效率也是问题,不过类应该不很很多吧==以后再优化吧,这个功能用jquery很简单。

如果大家还想深入学习,可以点击两个精彩的专题:javascript选项卡操作方法汇总 jquery选项卡操作方法汇总

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
控制打印时页眉角的代码
Feb 08 Javascript
JavaScript开发时的五个注意事项
Dec 08 Javascript
JavaScript 封装Ajax传递的数据代码
Jun 05 Javascript
JavaScript Event学习第三章 早期的事件处理程序
Feb 07 Javascript
javascript使用onclick事件改变选中行的颜色
Dec 30 Javascript
jquery教程限制文本框只能输入数字和小数点示例分享
Jan 13 Javascript
使用vue.js开发时一些注意事项
Apr 27 Javascript
jQuery each函数源码分析
May 25 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
Oct 19 Javascript
JS实现微信里判断页面是否被分享成功的方法
Jun 06 Javascript
使用vue-router beforEach实现判断用户登录跳转路由筛选功能
Jun 25 Javascript
layui+SSM的数据表的增删改实例(利用弹框添加、修改)
Sep 27 Javascript
jquery的checkbox,radio,select等方法小结
Aug 30 #Javascript
Javascript日期格式化format函数的使用方法
Aug 30 #Javascript
浅析ES6的八进制与二进制整数字面量
Aug 30 #Javascript
AngularJS轻松实现双击排序的功能
Aug 30 #Javascript
jQuery simpleModal插件的使用介绍
Aug 30 #Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
Aug 30 #Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 #Javascript
You might like
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
JavaScript代码复用模式实例分析
2012/12/02 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
JS动态加载脚本并执行回调操作
2016/08/24 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
vue.js项目中实用的小技巧汇总
2017/11/29 Javascript
layui点击导航栏刷新tab页的示例代码
2018/08/14 Javascript
使用layui 渲染table数据表格的实例代码
2018/08/19 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
2019/09/05 Javascript
js绘制一条直线并旋转45度
2020/08/21 Javascript
Python科学画图代码分享
2017/11/29 Python
Python之pandas读写文件乱码的解决方法
2018/04/20 Python
Sanic框架安装与简单入门示例
2018/07/16 Python
Django中的forms组件实例详解
2018/11/08 Python
django开发post接口简单案例,获取参数值的方法
2018/12/11 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
优秀员工个人的自我评价
2013/11/29 职场文书
幼儿园教师请假制度
2014/01/16 职场文书
婚前协议书怎么写
2014/04/15 职场文书
经典团队口号
2014/06/06 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
高中诗歌鉴赏教学反思
2016/02/16 职场文书
Python中for后接else的语法使用
2021/05/18 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
2022年四月新番
2022/03/15 日漫