2010-06-08 15 views
32

मैं गलत हो रहा है कि क्या हो रहा है, लेकिन मैं जो कह सकता हूं उससे मुझे एक डीओएम तत्व मिल रहा है और जब मैं .each() का उपयोग करता हूं तो jQuery ऑब्जेक्ट नहीं प्राप्त कर रहा हूं।jQuery .each() डीओएम तत्व देता है और एक jQuery ऑब्जेक्ट

नीचे this के रूप में काम नहीं करेगा एक डोम तत्व और नहीं एक jQuery वस्तु को संदर्भित करता है

$("span[id$='_TotalItemCost']").each(function() { 
    var someText = this.text(); 
}); 

एक jQuery वस्तु को this को बदलने के लिए संशोधित और सब कुछ ठीक

$("span[id$='_TotalItemCost']").each(function() { 
    var someText = $(this).text(); 
}); 

है कि वहाँ कुछ है मेरे चयनकर्ता के साथ मज़ाकिया? jQuery .each() documentation गलत है और यह एक jQuery ऑब्जेक्ट नहीं है बल्कि एक DOM तत्व .each() द्वारा लौटाया गया है?

उत्तर

37

डॉक्यूमेंटेशन गलत नहीं है लेकिन आप गलत समझ सकते हैं कि एक jQuery ऑब्जेक्ट क्या है।

jQuery ऑब्जेक्ट $() फ़ंक्शन द्वारा वापस किया जाता है। तो $("span[id$='_TotalItemCost']") एक jQuery ऑब्जेक्ट है जिसमें चयनित प्रत्येक अवधि तत्व शामिल है।

.each() का उपयोग jQuery ऑब्जेक्ट में निहित तत्वों पर पुन: सक्रिय होगा। यही कारण है कि यह एक डोम नोड है और एक jQuery वस्तु नहीं है।

आपने इस विशिष्ट तत्व पर jQuery विधियों का उपयोग करने के लिए $(this) का उपयोग कर सही काम किया है।

+2

फ़्यूथर, jQuery ऑब्जेक्ट्स स्वयं डीओएम ऑब्जेक्ट से भारी हैं - हम में से कुछ अतिरिक्त फ्लाफ नहीं चाहते हैं अगर हम कुछ सरल के बाद हैं .. –

+1

बहुत बढ़िया, बस उस दस्तावेज में यह टिड्बिट मिला जो मैंने छोड़ा था * कॉलबैक वर्तमान डीओएम तत्व के संदर्भ में निकाल दिया गया है, इसलिए कीवर्ड 'यह' तत्व को संदर्भित करता है। * – ahsteele

+2

$ (अभिव्यक्ति)। प्रत्येक (..) चेनिंग के लिए jquery उदाहरण देता है। यह शायद jquery दस्तावेज का जिक्र कर रहा है। –

3

@ विन्सेंट रॉबर्ट, आपने इसे काफी संक्षेप में सारांशित किया है, लेकिन मुझे बस थोड़ा सा विस्तार करने दें।

भले ही JQuery प्रोटोटाइप के साथ एक रूट है जो इसके मूल उदाहरण को विस्तारित करता है, यह एक वस्तु की तरह अधिक कार्य करता है।

यदि आप विधियों/कार्यों से वस्तुओं को अलग करते हैं और उन्हें व्यक्तिगत रूप से देखते हैं तो आप समझेंगे कि jQuery इंटरफ़ेस कैसे बनाया गया है।

si किसी ऑब्जेक्ट के रूप में $() के बारे में सोचें, और each() को एक विधि के रूप में सोचें। आप jQuery $() "चयनकर्ता" का उपयोग करके किसी ऑब्जेक्ट को प्रारंभ करते हैं, बदले में चुड़ैल एक ऑब्जेक्ट देता है जिसमें चयनकर्ता $() से चयनित केवल elemetns/डेटा होता है।

इसके बाद आपके पास चयनित सामग्री पर सीधे चलने वाले विधियों/फ़ंक्शंस हैं, लेकिन विधियों को एक jquery ऑब्जेक्ट वापस नहीं करना चाहिए क्योंकि अधिकांश समय नोड्स को वापस नहीं लौटाते हैं, बल्कि केवल तार या बुलियन हैं, इसलिए उन्हें एक jQuery में लपेटा जाता है वस्तु व्यर्थ होगा।

अपने ओ पी के रूप में प्रत्येक कार्य के आसपास आधारित है, अपने क्योंकि प्रत्येक विशेष रूप से नोड्स और के रूप में ऐसी

उदाहरण के लिए

तत्वों के लिए नहीं बनाया गया है एक jQuery वस्तु वहाँ प्राप्त करने के लिए, आप एक jQuery वस्तु यहाँ चाहेगा मतलब नहीं?

$({a:'1',b:'2'}).each(function(){ 
}); 

यह बुरा सही, और व्यर्थ होगा, यही कारण है कि तरीकों करना/वस्तुओं को वापस नहीं करना चाहिए, जब तक विधि एक सिंगलटन वापस जाने के लिए, जिसका अर्थ है या विशेष रूप से वस्तु लौटने के लिए बनाया गया है।

भी, जब मैं ऑब्जेक्ट कहता हूं, मैं जेसन ऑब्जेक्ट्स के बारे में बात नहीं कर रहा हूं, लेकिन विधि/प्रोटोटाइप ऑब्जेक्ट्स।

उम्मीद है कि इससे मदद मिलती है।

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