¿Cuál es la diferencia entre $.each (selector) y selector(selector).cada()


¿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 html para la celda de la tabla que se está seleccionando y sobre la que se está actuando se ve así:

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

He revisado la documentación de jQuery, pero todavía no entiendo la diferencia. (¿Soy yo o esa documentación a veces es ligeramente "nebulosa" en claridad de contenido?)

Información añadida:

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

El primer ejemplo viene de una línea en mi código que elimina el

para cualquier fila con una casilla de verificación marcada:
$.each($('#classesTable input[name="deleteClasses[]"]:checked').parent().parent().parent().remove());

El segundo ejemplo viene de una situación en la que miro a través de la #classesTable para cualquier casilla de verificación marcada y eliminar su elemento coincidente en un menú desplegable.

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

Entiendo que hacen dos cosas diferentes, pero no al punto de que pueda decir "Necesito usar $.cada() en este caso y .cada (function () {}) en otro caso.

¿Son intercambiables en absoluto? Sólo en algunos casos? Nunca?

 76
Author: marky, 2011-07-07

8 answers

Descripción:

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

Ejemplos:

Array Javascript (u objeto js ) usando $.cada uno():

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

Uso de objetos jQuery .cada uno()

$('#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 está buscando más ejemplos+detalles, $.cada vs .cada uno()

Recursos

 97
Author: Phil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:33

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

El $.cada función() no es la misma como .each (), que se usa para iterar, exclusivamente, sobre un objeto jQuery. El $.cada función () se puede utilizar para iterar sobre cualquier colección, ya sea es un mapa (objeto JavaScript) o un matriz.

 5
Author: tig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:21:03

Realmente quieres usar $.each con una matriz que no sea elementos o algo así. ie:

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

Usarías $.each(x... para atravesar eso en lugar de x.each :)

.each es solo para elementos:)

 3
Author: Michael Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:19:23

No hay diferencia funcional. Cada objeto jQuery posee un método .each() heredado de jQuery.fn. Al llamar a este object method, jQuery ya sabe cuál Array (-like object) iterar. En otras palabras, recorre el indexed propertys desde el objeto jQuery actual.

$.each() por otro lado es solo una "herramienta auxiliar" que recorre cualquier tipo de Array o Object, pero por supuesto tienes que decirle a ese método qué objetivo quieres iterar.
También se encargará de usted si pasa en una matriz o objeto, hace lo correcto usando un for-in o for loop bajo el capó.

 1
Author: jAndy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:20:31

El primero ejecutará la función de devolución de llamada a los elementos de la colección que ha pasado, pero su código no es sintácticamente correcto en este momento.

Debe ser:

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

Véase: http://api.jquery.com/jQuery.each /

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

Véase: http://api.jquery.com/each /

 1
Author: StuperUser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:28:04

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

JQuery.cada uno()

En el segundo caso solo puede itterate sobre objetos jQuery como se indica aquí:

.cada uno()

 0
Author: Jamie Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:21:06

Por lo que entiendo $.each(); recorre un objeto o matriz y le da el iterador y el valor de cada elemento.

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

 0
Author: Seth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:21:24

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

La función $.each() no es la misma que .each(), que se utiliza para iterar, exclusivamente, sobre un objeto jQuery. La función $.each() se puede usar 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. (El valor también se puede acceder a través de la palabra clave this, pero Javascript siempre envuelva este valor como un objeto incluso si es un valor simple de cadena o número.) El método devuelve su primer argumento, el objeto que se iteró.

 0
Author: Odnxe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-07 13:32:47