2010-08-18 12 views
6

jQuery में, चयनकर्ता $ ('[id = foo]')$ ('# foo') से कम कुशल है?

उत्तर

16
  • आसान व सरल उपाय: हाँ!

  • लम्बी कहानी (अभी भी वास्तव में कम)

    $('[id=foo]') 
    

    जबकि

    $('#foo') 
    

    सीधे getElementById कॉल तत्व का चयन करने कड़ाके की धूप (सीएसएस क्वेरी इंजन) का उपयोग करता है।

एक बहुत लंबा कहानी है के लिए, यहाँ हम चले: $('[id=foo]') जो सार्वभौमिक चयनकर्ता का उपयोग करता $('*:[id=foo]') के लिए एक पर्याय है। इसका मतलब है, यह आपके मार्कअप के भीतर सभी नोड्स से पूछताछ करता है और फिर उनमें से कौन सा id === foo (जो उम्मीद है कि केवल एक तत्व, आईडी = अद्वितीय) से मेल खाता है। बेशक, महंगा, बहुत महंगा है। और यही कारण है कि आपने कभी कभी इस तरह के चयनकर्ता को कभी नहीं लिखना चाहिए! हमेशा यदि संभव हो तो इसे पूरी तरह योग्य बनाएं, जैसे $('span:[id=foo]')

+0

आह यहाँ एक उप सवाल यह है कि ('अवधि: [id = foo]') '' $ (span # foo) 'या एक अलग चयनकर्ता के लिए बस लम्बाई? – HurnsMobile

+0

@ हर्नमोबाइल: बिलकुल नहीं। '$ ('काल [id = foo]')'। मैं वास्तव में यहां jQuery इनिट कोड पर एक नज़र डालने की सिफारिश करता हूं। jQuery 'getElementById' या 'getElementsByTagName' की सीधी कॉल के लिए कुछ चयनकर्ता अभिव्यक्तियों को पार्स करता है, मुझे लगता है कि' $ (span # foo)' उनमें से एक है। तो यह निश्चित रूप से '$ ('अवधि: [id = foo]') से तेज़ है। वह अभिव्यक्ति Sizzle में जाएगी और यह स्पष्ट रूप से ऊपर उल्लिखित तरीकों में से एक से अधिक समय लेता है। – jAndy

+0

बहुत जानकारीपूर्ण, बहुत बहुत धन्यवाद। आईडी को लक्षित करने के लिए $ ("# foo") के अलावा कुछ का उपयोग करने पर विचार करने का कारण यह है कि जिस आईडी को मैं लक्षित कर रहा था उसमें एक अवधि थी, जो स्पष्ट रूप से समस्याग्रस्त है क्योंकि jQuery इसे आईडी और कक्षा के रूप में समझता है। तो $ ("[id = address.State]" का उपयोग करके), उदाहरण के लिए, मैं इस मुद्दे को हल कर सकता हूं। इसके चारों ओर जाने का एक और तरीका है कि इस अवधि से बचने के लिए $ ("# पता \\। राज्य"), लेकिन मैंने सोचा कि डबल एस्केप कम पठनीय हो सकता है। हालांकि, आपके द्वारा बताए गए दक्षता हानि को देखते हुए, मैं शायद वैसे भी इसका उपयोग करूंगा। – jbyrd

1

हाँ। `$ है -

jQuery में सबसे तेजी से चयनकर्ता आईडी चयनकर्ता $ ('# foo'), क्योंकि यह एक देशी JavaScript विधि करने के लिए सीधे नक्शे, getElementById() के लिए आप तो JANDY

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