1. 程式人生 > >jQuery中this與$(this)的區別總結

jQuery中this與$(this)的區別總結

fun 方法 spa attr .get 就是 click 裏的 box

這裏就談談this與$(this)的區別。

1、jQuery中this與$(this)的區別

   $("#textbox").hover(   
      function() {   
           this.title = "Test";   
      },   
      fucntion() {   
          this.title = "OK”;   
      }   
); 

這裏的this其實是一個html 元素(textbox),textbox有text屬性,所以這樣寫是完全沒有什麽問題的。
但是如果將this換成(this)Errorthis

(this)的區別在此。

\\Error Code:   
$("#textbox").hover(   
       function() {   
          $(this).title = "Test";   
       },   
       function() {   
          $(this).title = "OK";   
       }   
); 

$()這是jQuery的一個函數,也是最核心最基本的函數

功能一:傳入一個選擇器字符串,獲得這個選擇器對應的dom內容,保存在[]中,也就是俗稱的jQuery對象。例如

(‘#id‘)(‘.class’) $(‘tag’)
功能二:傳入一個匿名函數,例如

$(function(){})//這個匿名函數在網頁載入完成後開始執行
功能三:將JavaScript對象包裝成為jQuery對象。例如

$(this)
$({a:1,b:2,c:3})
$(document.getElementById(‘idstr‘))

this是javascript**自身的** 語法關鍵字,它指向一個javascript對象,所以可以使用所指向的目標javascript對象所擁有的方法, 但他自己不是一個普通的變量,所以你無法自己定義一個變量叫this

所以為了使用jQuery對象的方法,你必須傳入jQuery函數$(this), 將javascript 對象包裝成為一個jquery對象。

這裏的$(this)是一個JQuery對象,而jQuery對象沒有title 屬性,因此這樣寫是錯誤的。

JQuery擁有attr()方法可以get/set DOM對象的屬性,所以正確的寫法應該是這樣:

正確的代碼:

$("#textbox").hover(   
      function() {   
         $(this).attr(’title’, ‘Test’);   
      },   
      function() {   
         $(this).attr(’title’, ‘OK’);   
      }   
); 

使用jQuery的好處是它包裝了各種瀏覽器版本對DOM對象的操作,因此統一使用$(this)而不再用this應該是比較不錯的選擇。

jQuery中this與$(this)的區別就介紹到這裏。

2、典型錯誤與註意點

var node = $(‘#id‘);
node.click(function(){
  this.css(‘display‘,‘block‘);  //報錯  this是一個html元素,不是jquery對象,因此this不能調用jquery                             的css()方法
  $(this).css();      //正確   $(this)是一個jquery對象,不是html元素,可以用css()方法
  this.style.display = ‘block‘;  //正確  this是一個html元素,不是jquery對象,因此this不能調用jquery的css()方法,但是可以用javascript來更改style屬性

});

不要濫用$(this)

如果不了解javasrcipt中基本的DOM屬性和方法的話,很容易濫用jQuery對象。比如:

$(‘#someAnchor’).click(function() {

    alert( $(this).attr(‘id’) );

});

如果你只是通過jQ對象獲取簡單的dom元素的屬性比如id,那麽你完全可以使用js原生的方法:

$(‘#someAnchor’).click(function() {

    alert( this.id );

});

諸如“src,” “href,” 和“style.”等一些屬性在老版本的ie中使用了getAttribute方法。

jQuery中this與$(this)的區別總結