首頁  >  文章  >  web前端  >  jQuery:click()方法中使用this的問題來解決

jQuery:click()方法中使用this的問題來解決

黄舟
黄舟原創
2017-06-27 10:00:054862瀏覽

jQ版本:jquery-1.7.2.js

    <div id="box">test</div>
<script>
    $(function(){ 
        $(&#39;#box&#39;).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 = $(&#39;#box&#39;);
$box.click(function(){    //TODO});

而函數執行的環境物件跟你這句程式碼獲得什麼物件沒關係,本質是在這個DOM上綁定一個事件
事件觸發時,this就只是這個DOM

$(this)並不會改變這個DOM對象,只是進行了一次包裝,就像是加了一層外殼,讓他變成JQuery對象,從而能夠使用JQuery方法,並不是像傳入選擇器一樣去尋找DOM,因此它仍是目前觸發此事件的div.box。包裝後的JQuery可以還原成DOM物件。
看看下面的程式碼,透過事件物件取得觸發事件的物件:

$(&#39;.box&#39;).click(function(event){    console.log(event.target);    console.log(event.target==this);//非事件冒泡情况下为true
    console.log($(this).get(0)==this);//true});

以上是jQuery:click()方法中使用this的問題來解決的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn