經常在寫jQuery的時候分不清this 和 $(this),為了方便起見盡量不用this,只用$(this)。但是今天在別人的代碼的基礎上改一些東西,又遇到了這個this,不得不把它弄明白。
$(this)相當於jQuery(this),是一個jQuery對象,只能使用jQuery的屬性和方法;而this中存放的是DOM元素,屬於javascirpt中的DOM元素對象,要使用DOM元素對象的屬性和方法。
例如下面的寫法是正確的:
this.setAttribute('class','test');
如果寫成下面這樣,就會報錯:
$(this).setAttribute('class','test');
報錯說undefined,也就是所$(this)沒有被定義。因為setAttribute是DOM對象的方法,而不是jQuery對象的方法。同樣,反過來使用也會報錯。例如:
this.attr('class','test');
因為attr是jQuery設置屬性值的方法,不能用在DOM元素對象上面,因此這樣寫會報錯。這個時候應該用$(this):
$(this).attr('class','test');
其實可以通過alert查看$(this)與this的不同,alert($(this));彈出的結果是[object Object ],alert(this);彈出來的是[object HTMLImageElement]。這里的Object指的就是jQuery對象,HTMLImageElement 指的是html元素對象。
$(this)與this的區別本質上是javascript對象與jQuery對象的區別。當然jQuery對象也可以轉化為javascript對象。
$(this)[0]==this;
即這種jQuery對象可以通過加下標為0方式轉化成javascript對象,相當於$(this).get(0) == this;用這種get(0)的方式獲取到對象的DOM對象然后就可以使用相應的DOM方法。