2010-07-07 19 views
10

इस लाइन"यह" वाक्यविन्यास कैसे काम करता है?

$(this).attr("id").replace("_button",""); 

इस एक के बराबर है?

this.attr("id").replace("_button",""); 
+2

इस कोड पर अधिक संदर्भ उपयोगी होगा। मैंने एक जवाब छोड़ा लेकिन मैंने कुछ धारणाएं कीं जो कि यह कहां से आया था, इस पर आधारित गलत हो सकता है। – spinon

उत्तर

9

this के बाद से हमेशा object of invocation का संदर्भ होता है, यह वास्तव में निर्भर करता है, जहां आपको लगता है कि कोड कहते हैं।

आप एक jQuery event handler के भीतर इस कॉल करते हैं, thisDOM element खुद के लिए एक संदर्भ है, तो आप एक jQuery वस्तु में बुला $() से पहले आप उस पर jQuery तरीकों कॉल कर सकते हैं करके इसे अनुवाद करने की जरूरत है। यही कारण है कि बदले में इसका मतलब है

this.attr("id").replace("_button",""); 

वहाँ काम नहीं करेगा।

आप उदाहरण के लिए एक प्लगइन विधि writting कर रहे हैं, this पहले से ही एक jQuery object (reference) है और दोनों लाइनों वास्तव में एक ही करना होगा। बेशक, यदि this पहले से ही jQuery object है तो आप इसे फिर से पार्स करने का प्रयास कर अतिरिक्त काम कर रहे हैं।

उदाहरण:

$.fn.yourplugin = function(){ 
    // this refers to a jQuery object 
    return this.each(function(i,v){ 
    }); 
}); 
+0

+1 लगभग सटीक विचारों के लिए यहां: पी (कॉपी पेस्ट: डी) (और मुझे पसंद है * आमंत्रण की वस्तु *) –

+0

मुझे अभी एहसास हुआ कि क्रॉकफोर्ड सही है, उसने कहीं उल्लेख किया कि 'इस' के बारे में बात करना मुश्किल है। "अगर आप इसे कहते हैं" पहले से ही एक पाठक के लिए परेशानी है। – jAndy

0

नहीं। ऐसा लगता है जैसे आप एक jquery विधि के लिए उपयोग किए गए बंद होने के संदर्भ में हैं। फ़ंक्शन के भीतर यह वर्तमान DOM ऑब्जेक्ट को इंगित करता है इसलिए jquery फ़ंक्शन संभव नहीं होंगे। यही कारण है कि यह उस वस्तु को प्राप्त करने के लिए jquery फ़ंक्शन से लपेटा गया है।

4

यह संदर्भ पर निर्भर करता है, लेकिन शायद नहीं।

आप एक ईवेंट हैंडलर है, तो कहते हैं:

$('#_button_foo').click(function() { 
    $(this).attr("id").replace("_button",""); 
}); 

फिर thisDOM एलीमेंट जबकि $(this) एक jQuery वस्तु बनाता है और आप इस वस्तु पर jQuery कार्यों कॉल के पास भेजेगा।


दूसरी ओर, यदि आप एक प्लगइन को विकसित करने और

jQuery.fn.plugin = function() { 
    this.each(function() {...}); 
} 

है तो this jQuery वस्तु आप पर विधि कॉल करने के लिए संदर्भित करता है।

+0

जो लोग डाउनवोट कम से कम समझा सकते हैं क्यों। धन्यवाद :) –

+0

+1 लगभग सटीक विचारों के लिए यहां: पी – jAndy

1

$ (इस), एक jQuery वस्तु में डोम वस्तु बारी ताकि आप jQuery कार्यों का उपयोग कर सकते हैं।

तो $(this) और this समान नहीं हैं।

2

this उस वस्तु को संदर्भित करता है जिसका उपयोग किया जाता है। वैश्विक दायरे में यह window को संदर्भित करता है और एक विधि कॉल में यह उस ऑब्जेक्ट को संदर्भित करता है जिस पर विधि को बुलाया जाता है।

अपने मामले this में शायद डोम है कि एक घटना (click, hover, आदि) जैसे कुछ अन्य jQuery तंत्र या तत्वों (जैसे jQuery.each) की एक सूची पर एक यात्रा के साथ प्राप्त किया गया है में एक तत्व के पास भेजेगा। उस स्थिति में आप केवल उस DOM तत्व को प्राप्त करते हैं लेकिन jQuery विधियों के विस्तार के साथ एक jQuery ऑब्जेक्ट नहीं है जैसे attr। तो आपको $ कन्स्ट्रक्टर फ़ंक्शन का उपयोग करके इसे एक jQuery ऑब्जेक्ट में बदलना होगा।

1

जावास्क्रिप्ट में, कीवर्ड 'this' वस्तु जिसका संदर्भ में लिप्त हों को दर्शाता है। तो अगर आप Method1 के कोड के अंदर, myObj.method1() कॉल कर रहे हैं तो, 'this' myObj को उल्लेख करता है।

jQuery में, अधिकांश ऑपरेशन एक jQuery परिणाम सेट ऑब्जेक्ट लौटाते हैं, जिसे अक्सर एक jQuery रैपर कहा जाता है। उदाहरण के लिए, चयनकर्ता $("a") एक jQuery परिणाम सेट लौटाएगा जिसमें सभी <a> DOM तत्व शामिल हैं। $("a").get(0) प्रथम एंकर DOM एलीमेंट वापसी होगी, $("a").get(1) दूसरा लंगर वापसी होगी, आदि

तो $(this) jQuery आवरण वस्तु को संदर्भित करता है, और this डोम तत्व को दर्शाता है।

तो इसे सब कुछ समेटने के लिए: $(this).get(0)this जैसा ही होगा।

0

this हमेशा उस वस्तु को संदर्भित करता है कि वर्तमान कार्य एक सदस्य है। यदि फ़ंक्शन वैश्विक है, तो आमतौर पर window ऑब्जेक्ट होता है, कम से कम यदि आप किसी वेब ब्राउज़र में हैं।

$(this) वास्तव में $() (मुख्य jQuery फ़ंक्शन) है जो पैरामीटर के रूप में पहले उल्लिखित this के साथ बुलाया गया है। यह this को एक jquery ऑब्जेक्ट में लपेटता है जो सभी jQuery विधियों को प्रदान करता है। ये विधियां केवल this पर उपलब्ध नहीं हैं।

1

यह इस बात पर निर्भर करता है कि आप किस संदर्भ का उपयोग कर रहे हैं।

$(this) एक jQuery ऑब्जेक्ट है और this एक डॉम ऑब्जेक्ट है।

तो, वे समान नहीं हैं।

यदि आप jquery प्लगइन विकसित कर रहे हैं तो this$(this) जैसा ही है।

-1

मुझे लगता है कि यह नहीं है।

आप इसके बजाय this.id.replace ("_ बटन", "") का उपयोग कर सकते हैं।

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