javascript实现tab切换的四种方法
Posted qikexun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript实现tab切换的四种方法相关的知识,希望对你有一定的参考价值。
总结了4种实现方法。
首先,写出tab的框架,加上最简单的样式,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <!DOCTYPE html> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < style > * padding: 0; margin: 0;
li list-style: none; float:left;
#tabCon clear: both;
</ style > </ head > < body > < div id = "tanContainer" > < div id = "tab" > < ul > < li >标题一</ li > < li >标题二</ li > < li >标题三</ li > < li >标题四</ li > </ ul > </ div > < div id = "tabCon" > < div >内容一</ div > < div >内容二</ div > < div >内容三</ div > < div >内容四</ div > </ div > </ div > </ body > </ html > |
现在的显示效果如下图:

四个tab标题和四个内容区都显示在了页面中,现在要实现tab切换效果,即点击标题一,内容一显示出来,其他内容不显示;点击标题二,内容二显示出来,其他内容不显示……
那么,整体思路很简单,给四个标题绑定事件,触发的时候对应的内容显示,其他的内容隐藏。
方法一:点击标题对应的内容显示,非点击标题对应的内容隐藏。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | <!DOCTYPE html> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < style > * padding: 0; margin: 0;
li list-style: none;
</ style > < script > function tab(pid) var tabs=["tab1","tab2","tab3","tab4"]; for(var i=0;i< 4 ;i++) if(tabs[i]==pid) document.getElementById(tabs[i]) .style.display = "block" ; else document.getElementById(tabs[i]) .style.display = "none" ;
</script> </ head > < body > < div id = "tanContainer" > < div id = "tabNav" > < ul > < li onclick = "tab('tab1')" >标题一</ li > < li onclick = "tab('tab2')" >标题二</ li > < li onclick = "tab('tab3')" >标题三</ li > < li onclick = "tab('tab4')" >标题四</ li > </ ul > </ div > < div id = "tab" > < div id = "tab1" >内容一</ div > < div id = "tab2" >内容二</ div > < div id = "tab3" >内容三</ div > < div id = "tab4" >内容四</ div > </ div > </ div > </ body > </ html > |
方法二:先设置所有内容隐藏,然后点击标题对用的内容显示。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <!DOCTYPE html> <html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <style> * padding: 0; margin: 0;
li list-style: none; float:left;
#tabCon clear: both;
#tabCon_1 display: none;
#tabCon_2 display: none;
#tabCon_3 display: none;
</style> <script> function changeTab(tabCon_num) for (i=0;i<=3;i++) document.getElementById( "tabCon_" +i).style.display= "none" ; //将所有的层都隐藏 document.getElementById( "tabCon_" +tabCon_num).style.display= "block" ; //显示当前层 </script> </head> <body> <div id= "tanContainer" > <div id= "tab" > <ul> <li onclick= "changeTab('0')" >标题一</li> <li onclick= "changeTab('1')" >标题二</li> <li onclick= "changeTab('2')" >标题三</li> <li onclick= "changeTab('3')" >标题四</li> </ul> </div> <div id= "tabCon" > <div id= "tabCon_0" >内容一</div> <div id= "tabCon_1" >内容二</div> <div id= "tabCon_2" >内容三</div> <div id= "tabCon_3" >内容四</div> </div> </div> </body> </html> |
方法三:显示和隐藏通过是有拥有class控制,先把所有的内容隐藏dispaly设为none,而该class的display设置为block,遍历所有标题节点和内容节点,点击标题后,该标题节点和对用的内容节点拥有class,其他的没有。zhao123.top代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | <!DOCTYPE html> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < style > * padding: 0; margin: 0;
li list-style: none; float:left;
#tabCon clear: both;
#tabCon div display:none;
#tabCon div.fdiv display:block;
</ style > </ head > < body > < div id = "tanContainer" > < div id = "tab" > < ul > < li class = "fli" >标题一</ li > < li >标题二</ li > < li >标题三</ li > < li >标题四</ li > </ ul > </ div > < div id = "tabCon" > < div class = "fdiv" >内容一</ div > < div >内容二</ div > < div >内容三</ div > < div >内容四</ div > </ div > </ div > </ body > < script > var tabs=document.getElementById("tab").getElementsByTagName("li"); var divs=document.getElementById("tabCon").getElementsByTagName("div"); for(var i=0;i< tabs.length ;i++) tabs[i] .onclick = function ()change(this);
function change(obj) for(var i = 0 ;i<tabs.length;i++) if(tabs[i]==obj) tabs[i] .className = "fli" ; divs[i] .className = "fdiv" ; else tabs[i] .className = "" ; divs[i] .className = "" ;
</script> </ html > |
该方法的缺点是,内容块的div下面不能再有div标签了。
方法四:不用js,用“input:checked”来做tab切换,先把所有的内容隐藏,被选中的内容显示。代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | <!DOCTYPE html> < html > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < title >input:checked实现tab切换</ title > < style > input opacity: 0;/*隐藏input的选择框*/
label cursor: pointer;/*鼠标移上去变成手状*/ float: left;
label:hover background: #eee;
input:checked+label color: red;
/*选择前面有.tabs input:nth-of-type(x):checked的.panels .panel:nth-child(x)*/ .tabs input:nth-of-type(1):checked~.panels .panel:nth-child(1), .tabs input:nth-of-type(2):checked~.panels .panel:nth-child(2) opacity: 1;
.panel opacity: 0; position: absolute;/*使内容区域位置一样*/
</ style > </ head > < body > < div class = "tabs" > < input checked id = "one" name = "tabs" type = "radio" > < label for = "one" >标题一</ label > < input id = "two" name = "tabs" type = "radio" > < label for = "two" >标题二</ label > < div class = "panels" > < div class = "panel" > < p >内容一</ p > </ div > < div class = "panel" > < p >内容二</ p > </ div > </ div > </ div > </ body > </ html > |
该方法的缺点是,不同区域切换只能通过点击。
以上是关于javascript实现tab切换的四种方法的主要内容,如果未能解决你的问题,请参考以下文章
javascript数据类型及数据类型判断的四种方法
JavaScript函数的四种存在形态
JavaScript中判断数据类型的四种方法
JavaScript中判断数据类型的四种方法
javascript中函数的四种调用模式详解
javascript HTML静态页面传值的四种方法