原生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 相关文章推荐
Javascript 实现TreeView CheckBox全选效果
Jan 11 Javascript
关于extjs4如何获取grid修改后的数据的问题
Aug 07 Javascript
javascript学习笔记(三)BOM和DOM详解
Sep 30 Javascript
JavaScript中的boolean布尔值使用学习及相关技巧讲解
May 26 Javascript
js中scrollTop()方法和scroll()方法用法示例
Oct 03 Javascript
node.js中的事件处理机制详解
Nov 26 Javascript
JavaScript仿支付宝6位数字密码输入框
Dec 29 Javascript
Vue.js框架路由使用方法实例详解
Aug 25 Javascript
微信小程序block的使用教程
Apr 01 Javascript
vue工程全局设置ajax的等待动效的方法
Feb 22 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
Feb 01 Javascript
vue+elementui 实现新增和修改共用一个弹框的完整代码
Jun 08 Vue.js
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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
php中time()和mktime()方法的区别
2013/09/28 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
php中的curl使用入门教程和常见用法实例
2014/04/10 PHP
ThinkPHP中limit()使用方法详解
2016/04/19 PHP
php实现微信支付之退款功能
2018/05/30 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
javascript跑马灯悬停放大效果实现代码
2012/12/12 Javascript
jquery退出each循环的写法
2014/02/26 Javascript
了不起的node.js读书笔记之mongodb数据库交互
2014/12/22 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
Angular2中如何使用ngx-translate进行国际化
2017/05/21 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
vue如何实现自定义底部菜单栏
2019/07/01 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
Vue.js watch监视属性知识点总结
2019/11/11 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
Python使用Matplotlib实现Logos设计代码
2017/12/25 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python3.7 读取 mp3 音频文件生成波形图效果
2019/11/05 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
函授本科自我鉴定
2013/11/03 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
电钳工人个人求职信
2014/05/10 职场文书
人事任命书格式
2014/06/05 职场文书
合同纠纷调解书
2015/05/20 职场文书
2016党员干部廉洁自律心得体会
2016/01/13 职场文书
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫