2011-12-22 12 views
11

क्या यह वाक्यांश हमेशा सत्य है?

$("p").click(function(event) { 
    alert(event.currentTarget === this); 
}); 

क्या एक विधि दूसरे पर पसंद है? मुझे event.currentTarget के बजाय $(this) का उपयोग करना पसंद है, लेकिन क्या कुछ शर्तों में कोई बेहतर कर सकता है? कौनसा अच्छा है? बिल्कुल वही हैं?

और एक और बारीकियों - फ़ायरबग console.log(this) और console.log($(this)) पर जांच करते समय मुझे बिल्कुल वही तत्व मिलता है। अगर वे वही हैं - अलग क्या है? (के बाद से मैं जानता हूँ कि मैं इस $(this).css('color','white') लिख सकते हैं लेकिन this.css('color','white')

उत्तर

13

आम तौर पर, हाँ, यह वही होगा। आप इसे संदर्भ में हेरफेर करने के लिए $.proxy का उपयोग करके इसे अलग कर सकते हैं, लेकिन व्यवहार में शायद आप कभी नहीं करेंगे।

$(document.body).on('click', $.proxy(function(e) { 
    console.log(this);   // window 
    console.log(e.currentTarget); // document.body 
}, window)); 

अन्य प्रश्न के अनुसार, this एक मूल डोम तत्व है, जबकि $(this) एक jQuery ऑब्जेक्ट है जो DOM तत्व को लपेटता है। JQuery wrapper का अर्थ है कि आप jQuery कार्यों को चला सकते हैं जैसे css, जो देशी DOM तत्वों पर उपलब्ध नहीं हैं।


और, अपने प्रश्न का सटीक शब्दों जवाब देने के लिए, event.currentTarget सामान्य रूप से this के बराबर है, $(this) नहीं है।

+0

:(एक मिनट बहुत देर हो चुकी है। –

0

नहीं लिख सकते हैं यह गुण आम तौर पर समारोह के इस के बराबर हो जाएगा।

आप jQuery.proxy या गुंजाइश हेरफेर का एक और रूप का उपयोग कर रहे हैं, तो यह आपके द्वारा प्रदान किए गए किसी भी संदर्भ के बराबर होगा, event.currentTarget

1

आपके उत्तर का हिस्सा ऊपर है। मुझे उम्मीद है कि यह काफी स्पष्ट है।

नहीं console.log(this) और console.log($j(this)) आपको एक ही परिणाम नहीं देगा। $ (यह) इसे एक jQuery ऑब्जेक्ट में परिवर्तित करता है और इसलिए आप .css को विधियों की तरह कॉल कर सकते हैं जिन्हें jQuery ऑब्जेक्ट्स ($ (यह) पर कहा जा सकता है) और HTML तत्व नहीं जो this होंगे।

संबंधित मुद्दे