jQ版本:jquery-1.7.2.js
<div id="box">test</div>
<script> $(function(){ $('#box').click(function(){ //alert(this.html()); // 报错 alert(this.innerHTML);// test alert($(this).html()); // test }); });</script>
請問一下,經$('#box')取得後,已經得到jQuery對象了,為什麼this對應的還是DOM物件,而$(this)卻是jQuery物件呢?謝謝!
你要知道沒有jquery 也有js,沒有js就沒有jquery。 this 是js的東東,函數執行環境中的this 是屬於原生js的,怎麼能夠給你指向jquery物件。 穿上$(this)馬甲 才是jquery對象。
this引用的是函數執行的環境對象,例如在全域中調用,this就是window。所以你這個this並不是$("#box")回傳的,不是JQ對象,而是呼叫此函數的div這個dom物件。仔細理解下this。手機打字好費勁,如果還有不明白的明天開電腦說
$('#box')已經返回JQuery對象了啊,所以你後面才能調用click()方法,注意你這一步相當於
var $box = $('#box'); $box.click(function(){ //TODO});
而函數執行的環境物件跟你這句程式碼獲得什麼物件沒關係,本質是在這個DOM上綁定一個事件,
事件觸發時,this就只是這個DOM
$(this)並不會改變這個DOM對象,只是進行了一次包裝,就像是加了一層外殼,讓他變成JQuery對象,從而能夠使用JQuery方法,並不是像傳入選擇器一樣去尋找DOM,因此它仍是目前觸發此事件的div.box。包裝後的JQuery可以還原成DOM物件。
看看下面的程式碼,透過事件物件取得觸發事件的物件:
$('.box').click(function(event){ console.log(event.target); console.log(event.target==this);//非事件冒泡情况下为true console.log($(this).get(0)==this);//true});
以上是jQuery:click()方法中使用this的問題來解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!