2015-12-22 10 views
5

किसी सरणी तक पहुंचने पर, .eq() फ़ंक्शन का उपयोग करने के लिए उपयुक्त कब है?array.eq() बनाम सरणी [] जावास्क्रिप्ट और Jquery

उदाहरण के लिए, मैं है ...

slides.eq(slidesLength-1).css("z-index", (slidesLength-1)); 

और बाद में मेरे पास है ...

for(i=0; i<slidesLength-1; i++) { 
    $(slides[i]).css("left", "-100%"); 
} 

कोड के पहले टुकड़े में, स्लाइड शो अगर मैं का उपयोग करने डॉन से कार्य बंद हो जाता है। eq() फ़ंक्शन। हालांकि, दूसरा टुकड़ा काम करता है कि मैं .eq() फ़ंक्शन का उपयोग करता हूं या नहीं। ऐसा क्यों है?

उत्तर

6

slides एक सरणी नहीं है। यह एक jQuery वस्तु है। .eq() विधि आपको निर्दिष्ट सूचकांक पर jQuery ऑब्जेक्ट के रूप में तत्व देता है।

jQuery वस्तुओं सरणियों नहीं हो सकता है, वे नाटक कर सकते हैं एक length संपत्ति होने के साथ-साथ गुण अनुक्रमित करने के लिए इसी द्वारा किया जाना है। (क्योंकि वे सरणियों नहीं हैं, आप तरीकों .pop() की तरह उन पर कॉल कर सकते हैं नहीं, .forEach(), आदि।)

जब आप slides[i] करते हैं, आप वास्तव में DOM एलीमेंट, न कि एक jQuery वस्तु हो रही है। $() फ़ंक्शन DOM तत्व को एक jQuery ऑब्जेक्ट में बदल देता है।

तो, जब आप slides.eq(1) करते हैं, आंतरिक रूप से jQuery $(slides[i]) कर रहा है।

पीएस ऑब्जेक्ट्स, जैसे jQuery ऑब्जेक्ट्स, जो सरणी होने का नाटक करते हैं उन्हें "सरणी जैसी वस्तुओं" कहा जाता है। यदि आप console.log(slides), तो यह एक सरणी की तरह दिख सकता है। यह सिर्फ आपके कंसोल है जो आपके लिए चीजों को सुविधाजनक बनाने की कोशिश कर रहा है। (अधिक जानकारी के लिए यह प्रश्न देखें: Creating array-like objects in JavaScript)

+0

उस स्पष्टीकरण के लिए धन्यवाद। यह स्पष्ट है कि मुझे कुछ और पढ़ने की जरूरत है। –

5

.eq() एक jQuery विधि है जो एक jQuery ऑब्जेक्ट देता है, जबकि इंडेक्स द्वारा एक्सेस करते समय सादा डीओएम तत्व देता है। जब आप लौटा चयन पर jQuery विधियों (css()) का उपयोग करना चाहते हैं तो आपको eq() का उपयोग करना चाहिए।

कारण $(slides[i]) काम इसलिए है क्योंकि आप सादे तत्व को $() कन्स्ट्रक्टर में पास करके एक jQuery ऑब्जेक्ट का निर्माण कर रहे हैं।

+0

धन्यवाद। मैं अब अंतर समझता हूं। मैं बारीकियों के बारे में और अधिक पढ़ना सुनिश्चित करूँगा। –

3

आपका slides चर Array नहीं है, लेकिन एक jQuery ऑब्जेक्ट है।

.eq() एक jQuery ऑब्जेक्ट देता है, अंततः index सीमा से बाहर है, और ऋणात्मक index अंत से गिना जाता है।

.get() रिटर्न एक डोम तत्व, या undefined अगर index सीमा से बाहर है, और एक नकारात्मक index छोर से गिना जाता है।

[] एक डोम एलिमेंट देता है, या index सीमा से बाहर है तो एक त्रुटि फेंक दें।

...

इसके अतिरिक्त, jQuery विधियों से आप तत्वों के एक समूह के साथ बातचीत कर सकते हैं क्योंकि यह अकेला था। तो यदि आप करते हैं:

slides.css("left", "-100%"); 

यह jQuery ऑब्जेक्ट में निहित प्रत्येक मिलान तत्वों पर लागू होता है। उन पर लूप के लिए अनावश्यक है।

...

भी मिलान किया तत्वों से अधिक पाश करने के लिए पसंदीदा तरीका each() विधि का उपयोग किया जाता है:

slides.each(function (i, el) { 
    var $el = $(el); 
}); 

...

इसके अलावा यह एक स्थापित jQuery चर उपसर्ग के सम्मेलन है $ साइन के साथ; यह आपको jQuery ऑब्जेक्ट्स से डीओएम तत्वों को आसानी से अंतर करने देता है। लेकिन यह केवल स्वाद का मामला है।

+0

अच्छा जवाब ... मैं '.get()' विधि के बारे में भूल गया! –

+0

नोट: यदि आप किसी jQuery ऑब्जेक्ट पर पैरामीटर के बिना '.get()' को कॉल करते हैं, तो आपको एक [वास्तविक] सरणी (DOM तत्वों या जो भी jQuery ऑब्जेक्ट में था) वापस कर दिया जाएगा। –

+0

पूरी प्रतिक्रिया के लिए धन्यवाद। मैं आपके कोड को अपने कोड में एकीकृत करना सुनिश्चित कर दूंगा। –

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