¿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?


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


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.


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 :)


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


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/


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()


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.


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.