2010-07-27 10 views
27

Estoy usando .each() de jquery para iterar sobre un grupo de li's. Necesito un total de todos los li's emparejados. ¿Es la única forma de crear una variable de conteo fuera de .each() e incrementarla dentro de .each()? No parece muy elegante.obtener un total de .each de jquery()

var count; 
$('#accordion li').each(function() { 
    ++count; 
}); 
+0

Muchas gracias. Ten un buen dia. –

Respuesta

46

dos opciones:

$('#accordion li').size(); // the jQuery way 
$('#accordion li').length; // the Javascript way, which jQuery uses 

Desde jQuery llama longitud bajo el capó, que es más rápido de usar que en lugar de la llamada size().

+4

Los documentos jQuery realmente recomiendan usar 'length', not' size() ': vea el comentario en http://api.jquery.com/size/ – tvanfosson

+2

+1 -' length' ftw –

+0

Sí, simplemente no me gustó la replección del selector de jquery ... una vez para cada() y luego otra vez para el tamaño(). Acabo de asignar $ ('# accordion li') a una var ahora y lo llamé dos veces. –

7
$('#accordion li').length; 
6

Bueno, acabo de ver esta pregunta, y usted ya aceptó una respuesta, pero voy a dejar una de todos modos.

El punto de la pregunta parece estar relacionado con el incremento de un contador.

El hecho es que el método .each() de jQuery se encarga de esto. El primer parámetro para .each()es un contador de incrementos, por lo que no es necesario que lo haga usted mismo.

$('#accordian li').each(function(index) { 
     // index has the count of the current iteration 
    console.log(index); 
}); 

Como puede ver, hay una solución elegante incorporada para usted.

+1

Hola, gracias por la respuesta. De hecho, necesito el conteo total. Sé que el índice me da el contador de incrementos, pero necesito el recuento total de todos los elementos de la lista coincidente. –

0

Ok por lo que la mejor manera de hacer esto es el siguiente: en primer lugar mapear el conjunto envuelto en una variable para que nunca tenga que hacer la búsqueda chisporroteo dom nuevo:

var $myListItems = $('#accordian li'); 

Nota: mi preferencia es poner $ al comienzo de cualquier vars que se envuelven conjunto a jQuery, por lo tanto $ myListItems en contraposición a myListItems

continuación, ajuste una var fuera de la cada función que tiene la longitud del conjunto envuelto:

var myLength = $myListItems.length; 

Tenga en cuenta la falta de un $ aquí ya que la var no es un objeto jQuery.

Ahora ejecute cada función con una variable para el índice.

$myListItems.each(function(index){ 
    // myLength has the length 
    // index has the current, 0 based index. 
}); 

Ahora tiene lo que lo solicitado en el PO con una sola mirada y por lo tanto necesitan buscar a tientas en el cada función con la necesidad de conocer el contenido del envueltos establece sólo para saber lo largo de ella . la belleza de esto en un contador es que en cada iteración de cada uno ya conoces la longitud.

+0

aceptamos que no debemos buscar el dom dos veces para obtener el mismo resultado – yeahdixon

Cuestiones relacionadas