2009-02-03 24 views
6

हम प्रोटोटाइप से jQuery तक हमारी साइट को स्विच करने पर विचार कर रहे हैं। प्रोटोटाइप से बहुत परिचित होने के नाते, मैं प्रोटोटाइप के बारे में चीजों से अच्छी तरह से अवगत हूं कि मुझे सीमित या परेशान लगता है।मुझे प्रोटोटाइप उपयोगकर्ता के रूप में क्या jQuery परेशानियों के बारे में पता होना चाहिए?

jQuery उपयोगकर्ताओं के लिए मेरा प्रश्न है: थोड़ी देर के लिए jQuery के साथ काम करने के बाद, आपको निराशाजनक क्या लगता है? क्या jQuery के बारे में चीजें हैं जो आपको प्रोटोटाइप पर स्विच (बैक) के बारे में सोचती हैं?

उत्तर

3

शायद ही असली मुद्दा मैंने कभी में भाग लिया है $ (this) गुंजाइश की समस्या है। उदाहरण के लिए, यदि आप JQuery .each() फ़ंक्शन में निर्मित तत्वों और उप तत्वों पर लूप के लिए नेस्टेड कर रहे हैं, तो $ (यह) क्या संदर्भित करता है? उस स्थिति में यह आंतरिक-अधिकांश दायरे को संदर्भित करता है, जैसा कि यह होना चाहिए, लेकिन इसकी हमेशा अपेक्षा नहीं की जाती है।

सरल समाधान एक श्रृंखला में आगे ड्रिलिंग से पहले एक चर करने के लिए सिर्फ कैश $ (this) है:

$("li").each(function() { 
    // cache this 
    var list_item = $(this); 
    // get all child a tags 
    list_item.find("a").each(function() { 
     // scope of this now relates to a tags 
     $(this).hide("slow"); 
    }); 
}); 
2

(केवल एक चीज मैं के बारे में सोच सकते हैं कि इस तत्व के बजाय $("...").each(function) -calls में एक jQuery वस्तु है, के रूप में $(element) अधिक बार फिर बस तत्व प्रयोग किया जाता है। और वह extremly मामूली बात सिर्फ इसके बारे में है।

ऊपर के उदाहरण (सरलीकृत और मुझे पता है कि यह करने के लिए अन्य बहुत बेहतर तरीके, मैं अभी-अभी एक बेहतर उदाहरण के बारे में सोच नहीं सकता था हैं कि):

// Make all divs that has foo=bar pink. 
$("div").each(function(){ 
    if($(this).attr("foo") == "bar"){ 
    $(this).css("background", "pink"); 
    } 
}); 

each एक समारोह है कि एक लेता है पैरामीटर के रूप में कार्य करें, उस फ़ंक्शन को प्रत्येक मिलान तत्व के लिए एक बार बुलाया जाता है। fu में nction pass, this वास्तविक ब्राउज़र DOM-element को संदर्भित करता है, लेकिन मुझे लगता है कि आप अक्सर प्रत्येक तत्व पर कुछ jQuery फ़ंक्शन का उपयोग करना चाहेंगे, इस प्रकार $(this) का उपयोग करना होगा। यदि यह $(this) पर सेट किया गया था, तो आपको छोटा कोड मिल जाएगा, और आप अभी भी this.get(0) का उपयोग कर DOM तत्व ऑब्जेक्ट तक पहुंच सकते हैं। अब मैं उन चीजों के कारणों को देख रहा हूं, अर्थात् $(this) इसके बजाय लिखना मुश्किल है, और यदि आप डीओएम तत्व के साथ क्या करना चाहते हैं तो जिस तरह से आप इसे कर सकते हैं हो सकता है, और यदि आप $(this) चाहते हैं तो दूसरा तरीका तेज़ नहीं होगा।)

+0

आपने मुझे वहां खो दिया। मुझे लगता है कि मुझे पता है कि आपका क्या मतलब है, लेकिन, क्या आप इसे थोड़ा बेहतर समझा सकते हैं? – Juan

+0

जुआन: मैंने एक विशाल उदाहरण और स्पष्टीकरण-इन-विस्तार-ब्लॉक जोड़ा, उम्मीद है कि क्रिस्टल स्पष्ट है। – svinto

6

मुझे लगता है कि केवल यही मुझे मिलता है कि जब मैं एक तत्व के लिए चयन क्वेरी करता हूं तो मुझे याद रखना होगा कि तत्वों की एक सरणी देता है भले ही मुझे पता है कि केवल एक ही है। आम तौर पर, इससे कोई फर्क नहीं पड़ता है जब तक कि आप jQuery विधियों के बजाय सीधे तत्व से बातचीत नहीं करना चाहते हैं।

+0

यह मेरे लिए भी है, साथ ही साथ। हालांकि, यह मामूली है। – EndangeredMassa

2

मेरे दो दर्द अंक ब्रैकेट नरक किया गया है, बहुत भ्रामक

$('.myDiv').append($('<ul />').append($('<li />').text('content'))); 

मेरे अन्य आम मुद्दा jQuery में JSON के उपयोग के साथ क्या करना है प्राप्त कर सकते हैं, मैं हमेशा पिछले अल्पविराम याद आती है,

$('.myDiv').tabs({ option1:true, options2:false(, woops)}); 

अंत में, मैं लगभग 6 महीने के लिए jQuery का उपयोग कर रहा हूं और मुझे नहीं लगता कि मैं कभी भी प्रोटोटाइप पर वापस जाऊंगा। मैं बिल्कुल jQuery से प्यार करता हूं, और उनके द्वारा उपयोग की जाने वाली कई युक्तियों ने मुझे बहुत कुछ सीखने में मदद की है। एक अच्छी चाल जो मुझे पसंद है वह विधि कॉल के लिए स्ट्रिंग अक्षर का उपयोग कर रही है, मैंने प्रोटोटाइप के साथ वास्तव में बहुत कुछ नहीं किया।

$('.myDiv')[(add ? 'add' : 'remove') + 'Class']('redText'); 
+0

आपको वास्तव में फ़ीड करना चाहिए और अपना कोड इंडेंट करना चाहिए। यदि आप एक-पंक्ति सब कुछ करने की कोशिश कर रहे हैं तो JQuery वाक्यविन्यास बहुत गन्दा हो जाता है। – Soviut

+0

यह jquery विशिष्ट नहीं है। आप किसी ऑब्जेक्ट में किसी भी जावास्क्रिप्ट विधि के साथ ऐसा कर सकते हैं, क्योंकि वस्तुएं उनके प्रकार के बावजूद केवल महत्वपूर्ण/मूल्य जोड़े हैं। –

+0

@steve_c मुझे एहसास है कि यह मानक जावास्क्रिप्ट वाक्यविन्यास सामान है। यह सिर्फ एक दर्द बिंदु है जिसे मैंने jQuery का उपयोग करने से पाया है जो प्रोटोटाइप से अधिक पर निर्भर करता है। इसके अलावा मुझे यह भी एहसास है कि मेरी 'कूल चाल' jQuery विशिष्ट नहीं है, लेकिन मैंने ध्यान दिया। – bendewey

-1

।प्रत्येक:

jQuery (आप भले ही आप इसे उपयोग नहीं कर रहे सूचकांक की जरूरत है,):

$.each(collection, function(index, item) { 
    item.hide(); 
}); 

प्रोटोटाइप (आप आमतौर पर आइटम का उपयोग कर रहे हैं, ताकि आप सूचकांक को छोड़ सकते हैं):

collection.each(function(item) { 
    item.hide(); 
}); 
+1

मुझे विश्वास नहीं है कि यह सच है। "यह" प्रश्न में तत्व को इंगित करना है। आपको $ .each (संग्रह, फ़ंक्शन() {$ (यह) .hide();}) करने में सक्षम होना चाहिए; आप संग्रह भी कर सकते हैं। (कार्य() {$ (यह)। छुपाएं();}); – EndangeredMassa

+0

+1। – svinto

+0

+1 @ एंडेंज्रेडमासा – Gareth

-1

यदि आप बहुत सारे डोम मैनिपुलेशन कर रहे हैं तो यह वास्तव में केवल एक परेशानी है। PrototypeJs स्वचालित रूप से डोम तत्वों के लिए अपने एपीआई कहते हैं, तो यह (jQuery निश्चित रूप से ऐसा नहीं करती है) prototypejs में काम करता है:

var el = document.createElement("div"); 
el.addClassName("hello"); // addClassName is a prototypejs method implemented on the native HTMLElement 

यहां तक ​​कि $() फ़ंक्शन के माध्यम से देशी तत्व चलने के बिना।

पीएस: ध्यान दें कि यह आईई में काम नहीं करता है।

2

मुझे नहीं लगता कि कोई असली गॉथ, या यहां तक ​​कि किसी भी परेशान परेशानी हैं। यहां दिए गए अन्य उत्तर इस बात की पुष्टि करते हैं - मुद्दों को थोड़ा अलग एपीआई और विभिन्न जावास्क्रिप्ट कोडिंग शैली के कारण होता है जो jQuery को प्रोत्साहित करता है।

मैंने दो साल पहले प्रोटोटाइप का उपयोग शुरू किया और इसे एक रहस्योद्घाटन मिला। इतना शक्तिशाली, बहुत सुरुचिपूर्ण। कुछ महीनों के बाद मैंने jQuery की कोशिश की और पता चला कि वास्तव में कौन सी शक्ति और लालित्य है। मुझे कोई परेशानी याद नहीं है। अब मैं प्रोटोटाइप का उपयोग कर एक प्रोजेक्ट पर काम कर रहा हूं और यह एक कदम पीछे की तरह लगता है (निष्पक्ष होने के लिए, हम प्रोटोटाइप 1.5.1 का उपयोग कर रहे हैं)।

यदि आप इस सवाल को उलट देते हैं - "प्रोटोटाइप परेशानियों को मुझे jQuery उपयोगकर्ता के रूप में क्या पता होना चाहिए?" - आपको बहुत अधिक जवाब मिलेंगे।

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

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