Bir grup öğeyi jquery seçicilerini kullanarak döngü yaparken, koleksiyonda kaç öğe olduğunu öğrenmek için bir yol var mı?
cevap
Eğer zincirleme sözdizimi kullanıyorsanız .
(Mantıksız yolu. Seçiciyi tekrar ve index
kullanmanızı gerektirir) Ama bu each
içinde aradığınız işlevine toplama kullanılabilir hale getirmek için kolay yeterli. İşte bunu yapmak için bir yol var: Bir dizide için jQuery nesnesi dönüştürmek ve daha sonra kullanabilirsiniz, biraz dolambaçlı seçenek olarak
var collection = $(".class");
collection.each(function() {
// You can access `collection.length` here.
});
dizisi en forEach
.
$(".class").get().forEach(function(entry, index, array) {
// Here, array.length is the total number of items
});
:
forEach
'in geri arama için geçmiş olsun argümanlar (jQuery
ikinci argüman
this
olarak ve sıra sana verdiği) ziyaret edilen giriş, o giriş endeksi ve onu çağırdı dizi vardır
Bu, en az muğlak modern JavaScript motoru ve/veya Array#forEach
için bir shim varsayar.
Ya da hatta
Kendine yeni bir araç vermek:// 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);
});
};
Kullanımı:
$(".class").loop(function(element, index, set) {
// Here, set.length is the length of the set
});
length
veya size()
mu demek istediniz?
Sanırım, ** döngü içinde ** demek. –
uzunluğu bir özellik değil, bir işlevdir. size() boyu döndüren bir işlevdir. – Orbit
@Matt "döngüde iken". Yine de böyle bir özelliğin çok pratik bir kullanım sağlayacağından emin değilim. –
.length
özelliğini kullanın. Bir fonksiyon değil.
$(".class").each(function() {
// ...
});
... Orada kaç nesne bilmek each
işlev içinde kodu için herhangi (makul) bir yolu vardır sanmıyorum:
alert($('.class').length); // alerts a nonnegative number
Teşekkürler, bunu yukarıda belirtildiği gibi düzeltdim. – kojiro
sizsiniz jQuery bir sürümünü kullanıyorsanız sürümü 1.8 Eğer $ kullanabilirsiniz daha az ('.class'). sıfır parametresini alan boyut(). .size() yöntemi hakkında daha fazla bilgi için bkz. documentation.
Ancak 1,8 veya daha büyük bir süreyi kullanıyorsanız (veya yükseltmeyi planlıyorsanız) $ ('. Class'). Length özelliğini kullanabilirsiniz. .length özelliği hakkında daha fazla bilgi için bkz. documentation.
Veya, 'length' değerinin kendisini dış alanda saklayın. –
@Matt: Ama bunu yapmak için, ve ayrıca "her" yi çağırmak için, en azından koleksiyonun kendisini en azından geçici olarak depolamaya ihtiyacım var.Ve neden * yapma *? –
Evet, tek çözüm. JQuery'nin koleksiyona geri bildirime fazladan bir argüman vermesi gerektiğini her zaman düşündüm. – lonesomeday