2011-07-07 17 views
74

¿Cuál es la diferencia entre esto:

$.each($('#myTable input[name="deleteItem[]"]:checked').do_something()); 

y esto:

$('#myTable input[name="deleteItem[]"]:checked').each(function() { do_something }); 

el código HTML para la celda de tabla que se está seleccionando y actuar en consecuencia se ve así:

<td width="20px"><input type="checkbox" class="chkDeleteItem" name="deleteItem[]" value="' . $rowItem['itemID'] . '" /></td> 

he examinado la documentación de jQuery, pero todavía no lo hacen entiende la diferencia (¿Soy yo o es que la documentación veces un poco "nebulosa" en la claridad del contenido?)

Agregado Info:

Al parecer, mi intento de unos ejemplos genéricos es confundir a la gente! Junto con el paréntesis (previamente) perdido en el primer ejemplo. :(

El primer ejemplo viene de una línea en mi código que elimina la <tbody> de las filas con una casilla de verificación que está marcada:

$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove()); 

El segundo ejemplo proviene de una situación en la que miro a través la #classesTable para cualquier comprobado casillas de verificación y eliminar los elementos correspondientes en un menú desplegable.

$('#classesTable input[name="deleteClasses[]"]:checked').each(function(){ 
    $('#classesList option[value="' + $(this).attr('value') + '"]').remove(); 
}); 

entiendo que lo hacen dos cosas diferentes, pero no hasta el punto de que yo sería capaz de decir "necesito usar $ .each() en th es case y .each (function() {}) en otro caso.

¿Son intercambiables en absoluto? Solo en algunos casos? ¿Nunca?

+0

Al primer ejemplo de código le falta un corchete de cierre. – tjollans

+0

Un comentario y una coma, vea mi respuesta para ver un ejemplo. – StuperUser

+0

La intención del primer ejemplo podría interpretarse de diferentes maneras. Corrígelo para reflejar lo que realmente estás haciendo. – user113716

Respuesta

93

Descripción:

.each es un iterador que se utiliza para iterar sobre solamente jQuery colección objetos mientras jQuery.each ($.each) es un función general para iterar sobre javascript objetos y arrays.

Ejemplos:

Javascript Array (o un objeto js) usando $ each():

var myArray = [10,20,30]; 

jQuery.each(myArray, function(index, value) { 
    console.log('element at index ' + index + ' is ' + value); 
}); 

//Output 
element at index 0 is 10 
element at index 1 is 20 
element at index 2 is 30 

objetos jQuery utilizando .Cada()

$('#dv').children().each(function(index, element) { 
    console.log('element at index ' + index + 'is ' + (this.tagName)); 
    console.log('current element as dom object:' + element); 
    console.log('current element as jQuery object:' + $(this)); 
}); 

//Output 
element at index 0 is input 
element at index 1 is p 
element at index 2 is span 

Si usted está buscando más ejemplos + detalles, $.each vs .each()

Recursos

3

Quiere realmente usar $.each con una matriz que no sea de elementos o algo. es decir:

var x = ["test", "test2"]; 

que tendría que utilizar para atravesar $.each(x... que en lugar de x.each :)

.each es para los elementos solamente :)

1

La primera se ejecutará la función de devolución de llamada a los elementos de la colección has pasado, pero tu código no es sintácticamente correcto en este momento.

Debería ser:

$.each($('#myTable input[name="deleteItem[]"]:checked'), do_something); 

Ver: http://api.jquery.com/jQuery.each/

El segundo se ejecutará la función en cada elemento de la colección que se está ejecutando en.

Ver: http://api.jquery.com/each/

+0

Está llamando 'do_something' en lugar de pasarlo. Esto es incorrecto a menos que 'do_something' ocurra para devolver una función. – user113716

+1

Ah sí, gracias @patrick dw, la respuesta fue editada apropiadamente. – StuperUser

0

Tomado de http://api.jquery.com/jQuery.each/

La función $.each() no es el mismo que .each(), que se utiliza para iterar, exclusivamente, sobre un objeto jQuery. La función $.each() se puede utilizar para iterar sobre cualquier colección, ya sea un mapa (objeto JavaScript) o una matriz. En el caso de una matriz, a la devolución de llamada se le pasa un índice de matriz y un valor de matriz correspondiente cada vez. (También se puede acceder al valor a través de la palabra clave this, pero Javascript siempre ajustará este valor como un Objeto, incluso si es una cadena simple o valor numérico.) El método devuelve su primer argumento, el objeto que se iteró.

1

existe no diferencia funcional Todos los objetos jQuery poseen un método .each() heredado de jQuery.fn. Llamando a este object method, jQuery ya sabe en qué Array (-like object) iterar. En otras palabras, recorre el indexed propertys del objeto jQuery actual.

$.each() por el contrario es sólo una "herramienta de ayuda", que los bucles a través de cualquier tipo de Array o Object, pero por supuesto hay que decir que el método que se dirigen desea repetir.
También se ocupará de ti, ya sea que transfieras una matriz u objeto, hace lo correcto usando for-in o for loop debajo del capó.

5

de http://api.jquery.com/jQuery.each:

La función $ each() no es el mismo como .Cada(), que se utiliza para iterar, exclusivamente, sobre un objeto jQuery. La función 0. $ .each() se puede utilizar para iterar sobre cualquier colección, ya sea es un mapa (objeto JavaScript) o una matriz .

0

En el primer caso se puede iterar sobre objetos jQuery y también otros elementos de matriz como se indica aquí:

jQuery.each()

En el segundo caso sólo se puede itterate sobre los objetos jQuery como se indica aquí:

.each()

0

Por lo que entiendo $.each(); bucles a través de un objeto o matriz y se obtiene y o el iterador y el valor de cada elemento.

$().each(); recorre una lista de objetos jQuery y le proporciona el iterador y el objeto jQuery.

Cuestiones relacionadas