Al alternar sobre un grupo de elementos utilizando los selectores de jquery, ¿hay alguna manera de averiguar cuántos elementos hay en la colección?
Respuesta
Si está utilizando la sintaxis encadenada:
$(".class").each(function() {
// ...
});
... no creo que haya ninguna manera (razonable) para el código dentro de la función each
saber cuántos elementos hay . (poco razonables formas implicaría repetir el selector y el uso de index
.)
Pero es bastante fácil de hacer que la colección a disposición de la función que está llamando en each
. Aquí hay una manera de hacerlo:
var collection = $(".class");
collection.each(function() {
// You can access `collection.length` here.
});
Como una opción un tanto complicado, se puede convertir el objeto jQuery a una matriz y luego usar forEach
de la matriz. Los argumentos que van pasando a devolución de llamada forEach
's son la entrada que se visita (lo jQuery que da como this
y como segundo argumento ), el índice de esa entrada, y la matriz de la llamaste en:
$(".class").get().forEach(function(entry, index, array) {
// Here, array.length is the total number of items
});
Eso supone al menos vagamente motor de JavaScript moderno y/o una calzada para Array#forEach
.
O para el caso, darse 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
});
¿Quieres decir como length
o size()
?
Creo que quiere decir ** dentro de ** loop. –
longitud es un atributo, no una función. size() es una función que devuelve longitud. – Orbit
@Matt "when looping". Sin embargo, no estoy seguro de que dicha característica tenga mucho uso práctico. –
utilizar la propiedad .length
. Es no una función.
alert($('.class').length); // alerts a nonnegative number
Gracias, he corregido mi anterior para reflejar que .length es una propiedad. – kojiro
Si está utilizando una versión de jQuery que es menor que la versión 1.8 se puede utilizar el $ ('.class'). size() que toma cero parámetros. Consulte documentation para obtener más información sobre el método .size().
Sin embargo, si está utilizando (o planea actualizar) a 1.8 o superior, puede usar la propiedad $ ('. Class'). Length. Consulte documentation para obtener más información sobre la propiedad .length.
- 1. jQuery: ¿Vea cuántos elementos concuerda un selector?
- 2. jQuery .each() - ¿Usos prácticos?
- 3. jQuery .each() con Array
- 4. jQuery .each() index?
- 5. jQuery .each() defectuoso en BB OS5?
- 6. jquery 1.4 ¿Comportamiento en vivo en .each?
- 7. Contar elementos con jQuery
- 8. jQuery - $ .each encontrar si la primera ejecución de $ .each
- 9. jQuery each() con una cuerda
- 10. jquery esperando $ .each para terminar
- 11. jQuery .each() this y elemento
- 12. jQuery $ each() - Matriz de objetos
- 13. JavaScript/jQuery clearInterval en .each
- 14. jquery each vs. native para
- 15. Cuenta cuántos elementos en un div
- 16. ¿Cuántos elementos puede almacenar un ListView?
- 17. ¿Cuántos elementos hay entre dos iteradores?
- 18. ¿Cuántos elementos habrá en la matriz?
- 19. jQuery contar elementos con clase "marcada"
- 20. Uso de Jquery each() y children() para recorrer y ocultar/enfocar elementos de formulario
- 21. ¿La función jQuery "each()" es síncrona?
- 22. $ .each() índice número de inicio en jQuery
- 23. Jquery each - Stop loop y return object
- 24. obtener un total de .each de jquery()
- 25. jquery loop en datos Json usando $ .each
- 26. Usando jquery $ .each con múltiples selectores
- 27. ¿Cuántos métodos predeterminados tiene una clase?
- 28. jQuery Animación, Encadenamiento, .each() y .animate() (o fadeIn() y fadeOut())
- 29. ¿El método "each()" de jQuery es un ciclo for?
- 30. jQuery, obtenga ID de cada elemento en una clase usando .each?
O bien, almacene el valor 'length' en el ámbito externo. –
@Matt: Pero para hacer eso, y también para llamar a "cada uno", igual tendré que almacenar al menos temporalmente la colección.¿Y por qué * no * lo haces? –
Sí, la única solución. Siempre he pensado que jQuery debería proporcionar la colección como un argumento adicional a la devolución de llamada. – lonesomeday