Al recorrer un grupo de elementos usando los selectores de jquery, ¿hay alguna manera de averiguar cuántos elementos hay en la colección?
Si está utilizando sintaxis encadenada:
$(".class").each(function() { // ... });
... No creo que haya ninguna forma (razonable) para que el código dentro de each
función sepa cuántos elementos hay. (Las formas irrazonables implicarían repetir el selector y usar index
).
Pero es bastante fácil hacer que la colección esté disponible para la función que está llamando en each
. Aquí hay una forma de hacerlo:
var collection = $(".class"); collection.each(function() { // You can access `collection.length` here. });
Como una opción algo complicada, puede convertir su objeto jQuery en una matriz y luego usar forEach
de la matriz. Los argumentos que se pasan a la devolución de llamada de forEach
son la entrada que se está visitando (lo que jQuery le da como this
y como el segundo argumento), el índice de esa entrada y la matriz en la que la llamó:
$(".class").get().forEach(function(entry, index, array) { // Here, array.length is the total number of items });
Eso supone un motor de JavaScript al menos vagamente moderno y/o una corrección para Array#forEach
.
O para el caso, date una nueva herramienta:
// 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); }); };
Uso:
$(".class").loop(function(element, index, set) { // Here, set.length is the length of the set });
Si está utilizando una versión de jQuery que es anterior a la versión 1.8, puede usar $('.class').size() que toma cero parámetros. Consulte la documentación para obtener más información sobre el método .size().
Sin embargo, si está usando (o planea actualizar) a 1.8 o superior, puede usar la propiedad $('.class').length. Consulte la documentación para obtener más información sobre la propiedad .length.
Usa la propiedad .length
. No es una función.
alert($('.class').length); // alerts a nonnegative number