2010-01-25 10 views
9

यह एक जिज्ञासा प्रश्न है। जब कर रही है:एकाधिक आइटम चुनते समय jQuery प्रदर्शन

$('.selector1, .selector2').doSomething() 

jQuery पूरी तरह से दो बार डोम पार करता है प्रत्येक चयनकर्ता मिलान वस्तुओं के प्रत्येक सेट प्राप्त करने के लिए है या यह डोम में से एक ट्रेवर्सल में सभी तत्वों को खोजने की जाती है?

+0

मुझे ऐसा नहीं लगता क्योंकि कोर में जो देखा गया है उससे मैचों को विभिन्न नोड गुणों (नोडनाम, नोड टाइप, आईडी इत्यादि) पर रेगेक्स के साथ किया जाता है। इसलिए कोई भी चयनकर्ता डोम का एक पुनरावृत्ति उत्पन्न करता है। हालांकि, मैं इस पर 100% सकारात्मक नहीं हूं, इसलिए मैं दूसरों को आंतरिक के साथ अधिक familar कर दूंगा :-) – prodigitalson

+0

असल में उदाहरण खराब है क्योंकि एचटीएमएल में 'नोड मौजूद नहीं है :) –

+0

मुझे लगता है कि आप क्या करना चाहते हैं चयनकर्ता इंजन, सिज़ल की तलाश करें, जिसका स्रोत कोड आप देख सकते हैं: http://github.com/jeresig/sizzle/ http://github.com/jeresig/sizzle/blob/master/sizzle.js – artlung

उत्तर

1

मैं इसे स्थानीय ब्राउज़र कार्यों का उपयोग करता यह पता लगाने के लिए, का उपयोग कर लगता है:

document.getElementsByClassName() 
1

यह वास्तव में ब्राउज़र पर निर्भर करता है। नए ब्राउज़र में, यह किसी भी डॉम प्रश्नों के लिए document.querySelectorAll का उपयोग करेगा (हुड के तहत यह कक्षाओं के लिए document.getElementsByClassName को कॉल करता है)। पुराने ब्राउज़र में जो इसका समर्थन नहीं करते हैं, तो इसे अपने आप इसे समझना होगा, जो स्पष्ट रूप से धीमा होगा।

सामान्य रूप से, आपको पहले आईडी द्वारा सामान ढूंढना पसंद करना चाहिए (या कम से कम स्कोप को संकीर्ण करना)। कक्षा और टैग नाम गति के लिए अगले होंगे। असल में, मूल रूप से समर्थित डीओएम ऑपरेशन सबसे अच्छे हैं।

+0

ऐसा लगता है कि ज्यादातर मामलों में, यह प्रत्येक चयनकर्ता के लिए प्रत्येक बार डोम को पार करने जा रहा है। हालांकि यह डीओएम का पीछा कैसे कर रहा है चयनकर्ता (तत्व बनाम आईडी बनाम वर्ग) के प्रकार के आधार पर अलग होगा? –

+0

हाँ, यह आपके सभी प्रश्नों को विभाजित करने और एक समय में उन्हें निष्पादित करने के लिए एक रेगेक्स का उपयोग करेगा। हालांकि, कक्षाओं या आईडी के लिए प्रदर्शन के बारे में चिंता नहीं होगी। –

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