Tab切换5种方法

原文:http://zhanfeng.blog.51cto.com/6109904/1017901

李老师用了三天的时间把Tab切换的效果讲给我们,感觉从中学到了很多很多,李老师的讲课一如既往的棒,从他身上学的的不仅仅是技术,更多的是思想。

通过Tab切换我们学到:函数,数组,for循环,if语句,this关键字。其中this关键字是最重要的,this关键字第一层含义就是指向当前对象。下面我就总结一下this关键字:

 

 
 
  1. <script type="text/javascript"> 
  2. var lis; 
  3. function test1(){ 
  4. Alert(this) 
  5. function test2(){ 
  6. lis=document.getElementsByTagName("li"); 
  7. for(var i=0;i<lis.length;i++){ 
  8. lis[i].onclick=test1
  9. </script> 

当点击第一和第三个li时候弹出来的是window对象,当点击第二个li时候弹出来的是html对象。这样我们就很清晰的理解this关键字到底是指向什么,this就是指向它的当前对象第一个和第三个的当前对象是li,第二个的当前对象是window

下面来说一下5种方法吧!!

第一种方法:最笨的,代码量也是最多,但是是最容易理解的!主要代码如下:

 

 
 
  1. <script type="text/javascript"> 
  2. function changeTab1(){ 
  3. var li1=document.getElementById("li1"); 
  4. var li2=document.getElementById("li2"); 
  5. var li3=document.getElementById("li3"); 
  6. var div1=document.getElementById("div1"); 
  7. var div2=document.getElementById("div2"); 
  8. var div3=document.getElementById("div3"); 
  9. li1.className="sp"
  10. li2.className=""
  11. li3.className=""
  12. div1.className="sp"
  13. div2.className=""
  14. div3.className=""
  15. </script> 
  16. <body> 
  17. <ul> 
  18. <li class="sp" id="li1" onclick="changeTab1()"><a href="#">页面一</a></li> 
  19. <li id="li2" onclick="changeTab2()"><a href="#">页面二</a></li> 
  20. <li id="li3" onclick="changeTab3()"><a href="#">页面三</a></li> 
  21. </ul> 
  22. <div class="sp" id="div1">内容一</div> 
  23. <div id="div2">内容二</div> 
  24. <div id="div3">内容三</div> 
  25. </body> 

它主要是写了三个function方法每一个方法对应一个li,通过点击li来调用每个方法。这种方法没什么好说的很好理解。

第二种方法是函数中有关键字,只需要建一个函数就可以,这种方法比上一种前进了一大步,有种进入了工业革命的感觉!代码如下:

 

 
 
  1. <script type="text/javascript"> 
  2. function changeTab(a,b,c){ 
  3. var lia=document.getElementById("li"+a); 
  4. var lib=document.getElementById("li"+b); 
  5. var lic=document.getElementById("li"+c); 
  6. var diva=document.getElementById("div"+a); 
  7. var divb=document.getElementById("div"+b); 
  8. var divc=document.getElementById("div"+c); 
  9. lia.className="sp"
  10. lib.className=""
  11. lic.className=""
  12. diva.className="sp"
  13. divb.className=""
  14. divc.className=""
  15. </script> 
  16. <body> 
  17. <ul> 
  18. <li id="li1" class="sp" onclick="changeTab(1,2,3)"><a href="#">页面一</a></li> 
  19. <li id="li2" onclick="changeTab(2,1,3)"><a href="#">页面二</a></li> 
  20. <li id="li3" onclick="changeTab(3,1,2)"><a href="#">页面三</a></li> 
  21. </ul> 
  22. <div class="sp" id="div1">内容一</div> 
  23. <div id="div2">内容二</div> 
  24. <div id="div3">内容三</div> 
  25. </body> 

这个方法实现了一个函数可以解决问题,是跨进了一大步啊,这个方法没什么难得,主要是函数里面有了参数,通过参数来改变每次调用函数的不同意义。

第三种方法就是只传一个参数,这个方法只是第二种方法的改进,看一下代码吧!没什么可说的。

 

 
 
  1. <script type="text/javascript"> 
  2. function changeTab(a){ 
  3. var li1=document.getElementById("li1"); 
  4. var li2=document.getElementById("li2"); 
  5. var li3=document.getElementById("li3"); 
  6. var lia=document.getElementById("li"+a); 
  7. var div1=document.getElementById("div1"); 
  8. var div2=document.getElementById("div2"); 
  9. var div3=document.getElementById("div3"); 
  10. var diva=document.getElementById("div"+a); 
  11. li1.className=""
  12. li2.className=""
  13. li3.className=""
  14. lia.className="sp"
  15. div1.className=""
  16. div2.className=""
  17. div3.className=""
  18. diva.className="sp"
  19. </script> 
  20. </head> 
  21. <body> 
  22. <ul> 
  23. <li id="li1" class="sp" onclick="changeTab(1)"><a href="#">页面一</a></li> 
  24. <li id="li2" onclick="changeTab(2)"><a href="#">页面二</a></li> 
  25. <li id="li3" onclick="changeTab(3)"><a href="#">页面三</a></li> 
  26. </ul> 
  27. <div class="sp" id="div1">内容一</div> 
  28. <div id="div2">内容二</div> 
  29. <div id="div3">内容三</div> 
  30. </body> 

第四种方法:使用了for循环和关键字this,大量的减少了代码,提高了程序的复用,快要完美了,有种第二次工业革命哦!看看代码是如何的精简:

 

 
 
  1. <script type="text/javascript"> 
  2. function changeTab(a){ 
  3. var lis=document.getElementsByTagName("li"); 
  4. var divs=document.getElementsByTagName("div"); 
  5. for(var i=0;i<lis.length;i++){ 
  6. if(lis[i]==a){ 
  7. lis[i].className="sp"
  8. divs[i].className="sp"
  9. else{ 
  10. lis[i].className=""
  11. divs[i].className=""
  12. </script> 
  13. </head> 
  14. <body> 
  15. <ul> 
  16. <li id="li1" class="sp" onclick="changeTab(this)"><a href="#">页面一</a></li> 
  17. <li id="li2" onclick="changeTab(this)"><a href="#">页面二</a></li> 
  18. <li id="li3" onclick="changeTab(this)"><a href="#">页面三</a></li> 
  19. </ul> 
  20. <div class="sp" id="div1">内容一</div> 
  21. <div id="div2">内容二</div> 
  22. <div id="div3">内容三</div> 
  23. </body> 

代码很简洁有木有啊!这个方法还是需要传参,不过调用函数的时候直接用this就可以了这个好像跨出了又一大步 啊。这个方法的精髓我感觉就在于this关键字和for循环的使用使程序的复用性大大地提高了,思想就是每次循环和传进的参数比较来改变实现的。

第五种方法:for循环,this关键字提升,使程序无限复用,是最完美的一版,有点进入共产主义了啊。

 

 
 
  1. <script type="text/javascript"> 
  2. var lis; 
  3. function changeTab(){ 
  4. var divs=document.getElementsByTagName("div"); 
  5. for(var i=0;i<lis.length;i++){ 
  6. if(lis[i]==this){ 
  7. lis[i].className="sp"
  8. divs[i].className="sp"
  9. else{ 
  10. lis[i].className=""
  11. divs[i].className=""
  12. function test(){ 
  13. lis=document.getElementsByTagName("li"); 
  14. for(var i=0;i<lis.length;i++){ 
  15. lis[i].onclick=changeTab
  16. </script> 
  17. </head> 
  18. <body onload="test()"> 
  19. <ul> 
  20. <li class="sp"><a href="#">页面一</a></li> 
  21. <li><a href="#">页面二</a></li> 
  22. <li><a href="#">页面三</a></li> 
  23. </ul> 
  24. <div class="sp">内容一</div> 
  25. <div>内容二</div> 
  26. <div>内容三</div> 
  27. </body> 

这种方法最大的亮点是你看不到li中调用函数了,其实在body中调用了,通过调用test函数来实现了每个lichangeTab的调用,但是只要当点击li的时候才会调用changeTabchangeTab函数中if语句中比较的对象直接就是this,这个this就是代表每个li,这也是开始先讲this关键字的原因,这种方法精髓在于随意复用,不用传参。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值