1. 程式人生 > >js中關於this的理解和應用(選項卡)

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. this.className="on";

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

  15. }

  16. }

  17. }

它指向的是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)

另外附一個簡單的用法:

效果圖

相應程式碼

  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. #a div{

  29. width: 300px;

  30. height: 250px;

  31. border: 1px solid royalblue;

  32. border-top-color:brown ;

  33. margin: 30px 10px;

  34. display: none;

  35. }

  36. #a .div1{

  37. display: block;

  38. }

  39. </style>

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

  41. // JS實現選項卡切換

  42. window.onload=function(){

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

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

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

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

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

  48. ali[i].index=i;

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

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

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

  52. ali[t].className=""

  53. }

  54. this.className="on";

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

  56. }

  57. }

  58. }

  59. </script>

  60. </head>

  61. <body>

  62. <!-- HTML頁面佈局 -->

  63. <div id="a">

  64. <ul>

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

  66. <li >2</li>

  67. <li >3</li>

  68. </ul>

  69. <div class="div1"><br><br>275萬購昌平鄰鐵三居 總價20萬買一居

  70. 200萬內購五環三居 140萬安家東三環

  71. 北京首現零首付樓盤 53萬購東5環50平

  72. 京樓盤直降5000 中信府 公園樓王現房</div>

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

  74. 經典清新簡歐愛家 90平老房煥發新生

  75. 新中式的酷色溫情 66平撞色活潑家居

  76. 瓷磚就像選好老婆 衛生間煙道的設計</div>

  77. <div id="div3"> 通州豪華3居260萬 二環稀缺2居250w甩

  78. 西3環通透2居290萬 130萬2居限量搶購

  79. 黃城根小學學區僅260萬 121平70萬拋!

  80. 獨家別墅280萬 蘇州橋2居優惠價248萬</div>

  81. </div>

  82. </body>

  83. </html>