js中关于this的理解和应用(选项卡)

this的定义:在JavaScript中this表示函数运行的时候自动生成的一个内部对象,只能在函数内部使用。

简单例子

 
  1. <script type="text/javascript">

  2. alert(this); //window

  3. </script>

它指向的是window对象

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

情况一:函数调用

 
  1. var a = 'out';

  2. function test(){

  3. alert(this.a);

  4. }

  5. test(); //out

  6. var t = new test();

  7. alert(t.a);// undefined undefined

情况二:作为构造函数调用

 
  1. var a = 'out';

  2. function test(){

  3. this.a = a;

  4. alert(this.a);

  5. }

  6. test(); //out

  7. var t = new test();

  8. alert(t.a);// out out

情况三:作为对象方法调用

 
  1. function test(){

  2. alert(this.x);

  3. }

  4. var o = {};

  5. o.x=1;

  6. o.m=test;

  7. o.m(); //1

  8. //o.m=test(); //undefined

情况四:作为元素节点

 
  1. window.onload=function(){

  2. var a=document.getElementById("a");

  3. var aul=a.getElementsByTagName("ul");

  4. var ali=a.getElementsByTagName("li");

  5. var adiv=a.getElementsByTagName("div");

  6. for(var i=0;i<ali.length;i++){

  7. ali[i].index=i;

  8. ali[i].onclick=function(){

  9. for(var t=0;t<adiv.length;t++){

  10. adiv[t].className="";

  11. ali[t].className=""

  12.  
  13. }

  14. this.className="on";

  15. adiv[this.index].className = "div1";

  16. }

  17.  
  18. }

  19. }

它指向的是HTMLElement,也就是点击元素节点,如果将元素节点进行编号(ali[i].index=i),那么会自动寻找点击按钮相对应的板块(adiv[this.index])

下面是HTML代码:

 
  1. <div id="a">

  2. <ul>

  3. <li class="on" >1</li>

  4. <li >2</li>

  5. <li >3</li>

  6. </ul>

  7. </div>

在这种添加了元素和事件的情况下,this不再指向window对象,而是指向元素节点(li)

 

另外附一个简单的用法:

效果图

js中关于this的理解和应用(选项卡)

相应代码

 
  1. <!DOCTYPE html>

  2. <html>

  3. <head lang="en">

  4. <meta charset="UTF-8">

  5. <title>实践题 - 选项卡</title>

  6. <style type="text/css">

  7. /* CSS样式制作 */

  8. body{

  9. margin: 0;

  10. padding: 0;

  11. }

  12. ul{

  13. list-style:none; display:block; height:30px; line-height:30px;

  14. }

  15. ul li {

  16. width: 50px;

  17. height: 25px;

  18. line-height: 25px;

  19. border: 1px double #ccc;

  20. cursor: pointer;

  21. border-bottom:none;

  22. text-align: center;

  23. list-style: none;

  24. float:left;

  25. margin: 32px 0 0 0 ;

  26. }

  27. ul li.on{border-top:2px solid #8B4513;border-bottom:2px solid #FFFFFF;}

  28.  
  29. #a div{

  30. width: 300px;

  31. height: 250px;

  32. border: 1px solid royalblue;

  33. border-top-color:brown ;

  34. margin: 30px 10px;

  35. display: none;

  36.  
  37. }

  38. #a .div1{

  39. display: block;

  40. }

  41. </style>

  42.  
  43. <script type="text/javascript">

  44.  
  45. // JS实现选项卡切换

  46. window.onload=function(){

  47. var a=document.getElementById("a");

  48. var aul=a.getElementsByTagName("ul");

  49. var ali=a.getElementsByTagName("li");

  50. var adiv=a.getElementsByTagName("div");

  51. for(var i=0;i<ali.length;i++){

  52. ali[i].index=i;

  53. ali[i].onclick=function(){

  54. for(var t=0;t<adiv.length;t++){

  55. adiv[t].className="";

  56. ali[t].className=""

  57.  
  58. }

  59. this.className="on";

  60. adiv[this.index].className = "div1";

  61. }

  62.  
  63. }

  64. }

  65. </script>

  66.  
  67. </head>

  68. <body>

  69. <!-- HTML页面布局 -->

  70. <div id="a">

  71. <ul>

  72. <li class="on" >1</li>

  73. <li >2</li>

  74. <li >3</li>

  75. </ul>

  76.  
  77. <div class="div1"><br><br>275万购昌平邻铁三居 总价20万买一居

  78. 200万内购五环三居 140万安家东三环

  79. 北京首现零首付楼盘 53万购东5环50平

  80. 京楼盘直降5000 中信府 公园楼王现房</div>

  81.  
  82. <div id="div2"> 40平出租屋大改造 美少女的混搭小窝

  83. 经典清新简欧爱家 90平老房焕发新生

  84. 新中式的酷色温情 66平撞色活泼家居

  85. 瓷砖就像选好老婆 卫生间烟道的设计</div>

  86.  
  87. <div id="div3"> 通州豪华3居260万 二环稀缺2居250w甩

  88. 西3环通透2居290万 130万2居限量抢购

  89. 黄城根小学学区仅260万 121平70万抛!

  90. 独家别墅280万 苏州桥2居优惠价248万</div>

  91. </div>

  92. </body>

  93. </html>