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

81

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

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

Revisé la documentación de jQuery, pero todavía no entiendo la diferencia. (¿Soy yo o esa documentación a veces es un poco "nebulosa" en la claridad del contenido?)

Información agregada:

¡Aparentemente mi intento de ejemplos genéricos está confundiendo a la gente! Junto con el paréntesis (anteriormente) que faltaba en el primer ejemplo. :(

El primer ejemplo proviene de una línea en mi código que elimina el <tbody> de cualquier fila con una casilla de verificación marcada:

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

El segundo ejemplo proviene de una situación en la que busco en la #classesTable las casillas de verificación marcadas y elimino su elemento correspondiente 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 hasta el punto de que yo pueda decir "Necesito usar $ .each () en este caso y .each (function () {}) en otro caso.

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

Marky
fuente
A su primer ejemplo de código le falta un corchete de cierre.
tjollans
Un comentario y una coma, vea mi respuesta como ejemplo.
StuperUser
La intención del primer ejemplo podría interpretarse de diferentes formas. Corríjalo para reflejar lo que está haciendo realmente.
user113716
Agregué el par derecho faltante al final de la línea, justo antes del punto y coma.
marky
Consulte 5 formas de uso de jQuery $ .each () codepedia.info/use-jquery-each-method-loop
Satinder singh

Respuestas:

102

Descripción:

.eaches un iterador que se usa para iterar solo sobre la colección de objetos jQuery mientras que jQuery.each( $.each) es una función general para iterar sobre arreglos y objetos de JavaScript.


Ejemplos

1) Función de uso$.each()

var myArray = [10,20,30];

$.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

2) Método de uso.each()

$('#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

Recursos

Phil
fuente
5

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

La función $ .each () no es lo mismo que .each (), que se usa 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.

tig
fuente
3

Realmente desea usar $.eachcon una matriz que no sea elementos o algo así. es decir:

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

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

.each es solo para elementos :)

Michael Wright
fuente
1

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

$.each()por otro lado, es solo una "herramienta auxiliar" que recorre cualquier tipo de Arrayo Object, pero, por supuesto, debe indicarle a ese método qué objetivo desea iterar.
También se ocupará de usted ya sea que pase en una matriz u objeto, hace lo correcto usando un for-ino for loopdebajo del capó.

jAndy
fuente
1

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.

Debería ser:

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

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

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

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

StuperUser
fuente
Estás llamando en do_somethinglugar de pasarlo. Esto es incorrecto a menos do_somethingque devuelva una función.
user113716
0

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

jQuery.each ()

En el segundo caso, solo puede iterar sobre los objetos jQuery como se indica aquí:

.cada()

Jamie Dixon
fuente
0

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

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

Seth
fuente
0

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

La $.each()función no es la misma que .each(), que se usa para iterar, exclusivamente, sobre un objeto jQuery. La $.each()función 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á el valor this como un Objeto incluso si es una cadena simple o un valor numérico). El método devuelve su primer argumento, el objeto que fue iterado.

Odnxe
fuente