2011-02-28 11 views
30

जब jquery चयनकर्ताओं का उपयोग कर वस्तुओं के समूह पर लूपिंग होता है तो यह पता लगाने का एक तरीका है कि संग्रह पर कितने आइटम हैं?

उत्तर

76

आप श्रृंखलित सिंटैक्स का उपयोग कर रहे हैं । (अनुचित तरीके चयनकर्ता दोहरा और index का उपयोग कर शामिल होगा।)

लेकिन यह आसान समारोह संग्रह है कि आप each में कॉल कर रहे हैं उपलब्ध बनाने के लिए काफी है। यहाँ एक तरीका है कि करना है:,

var collection = $(".class"); 
collection.each(function() { 
    // You can access `collection.length` here. 
}); 

एक हद तक जटिल विकल्प रूप में आप एक सरणी के लिए अपने jQuery वस्तु परिवर्तित कर और उसके बाद का उपयोग सरणी के forEach

$(".class").get().forEach(function(entry, index, array) { 
    // Here, array.length is the total number of items 
}); 
: तर्क forEach के कॉलबैक के लिए पारित करने के प्रवेश का दौरा किया जा रहा है (क्या jQuery this के रूप में और दूसरा तर्क के रूप में आप देता है), उस प्रविष्टि के सूचकांक और सरणी आप पर यह कहा जाता है

यह कम से कम अस्पष्ट आधुनिक जावास्क्रिप्ट इंजन और/या Array#forEach के लिए एक शिम मानता है।

या उस बात के लिए, अपने आप को एक नया उपकरण दे:

// Loop through the jQuery set calling the callback: 
// loop(callback, thisArg); 
// Callback gets called with `this` set to `thisArg` unless `thisArg` 
// is falsey, in which case `this` will be the element being visited. 
// Arguments to callback are `element`, `index`, and `set`, where 
// `element` is the element being visited, `index` is its index in the 
// set, and `set` is the jQuery set `loop` was called on. 
// Callback's return value is ignored unless it's `=== false`, in which case 
// it stops the loop. 
$.fn.loop = function(callback, thisArg) { 
    var me = this; 
    return this.each(function(index, element) { 
     return callback.call(thisArg || element, element, index, me); 
    }); 
}; 

उपयोग:

$(".class").loop(function(element, index, set) { 
    // Here, set.length is the length of the set 
}); 
+1

या, 'लंबाई' मान को बाहरी दायरे में ही संग्रहीत करें। –

+0

@ मैट: लेकिन ऐसा करने के लिए, और 'प्रत्येक' को भी कॉल करें, मुझे अभी भी कम से कम अस्थायी रूप से संग्रह को संग्रहित करने की आवश्यकता होगी।और क्यों * नहीं * ऐसा करते हैं? –

+1

हाँ, एकमात्र समाधान। मैंने हमेशा सोचा है कि jQuery को कॉलबैक को अतिरिक्त तर्क के रूप में संग्रह की आपूर्ति करनी चाहिए। – lonesomeday

1

आपका मतलब length या size() जैसा है?

Refs: http://api.jquery.com/length/

+1

मुझे लगता है, उसका मतलब है ** ** लूप के भीतर। –

+1

लंबाई एक विशेषता है, एक समारोह नहीं। आकार() एक ऐसा फ़ंक्शन है जो लंबाई देता है। – Orbit

+0

@ मैट "जब लूपिंग"। मुझे यकीन नहीं है कि इस तरह की सुविधा का बहुत व्यावहारिक उपयोग होगा, हालांकि। –

3

.length संपत्ति का प्रयोग करें। यह एक फ़ंक्शन नहीं है।

$(".class").each(function() { 
    // ... 
}); 

... मैं वहाँ कोई भी (उचित) each समारोह के भीतर कोड के लिए जिस तरह से पता करने के लिए देखते हैं कितने आइटम नहीं लगता कि:

alert($('.class').length); // alerts a nonnegative number 
+0

धन्यवाद, मैंने उपरोक्त को प्रतिबिंबित करने के लिए इसे सही किया। लम्बाई एक संपत्ति है। – kojiro

3

आप jQuery का एक संस्करण है कि प्रयोग कर रहे हैं संस्करण 1.8 आप $ उपयोग कर सकते हैं की तुलना में कम ('.class')। आकार() जो शून्य पैरामीटर लेता है। .size() विधि पर अधिक जानकारी के लिए documentation देखें।

हालांकि यदि आप 1.8 या उससे अधिक तक (या अपग्रेड करने की योजना) का उपयोग कर रहे हैं तो आप $ ('। Class') का उपयोग कर सकते हैं। लंबाई संपत्ति। .length संपत्ति पर अधिक जानकारी के लिए documentation देखें।

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