web-dev-qa-db-fra.com

Quelle est la différence entre $ .each (sélecteur) et $ (sélecteur) .each ()

Quelle est la différence entre ceci:

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

et ça:

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

Le code html de la cellule de tableau sélectionnée et sur laquelle on agit est le suivant:

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

J'ai parcouru la documentation de jQuery, mais je ne comprends toujours pas la différence. (Est-ce moi ou cette documentation est parfois légèrement "nébuleuse" dans la clarté du contenu?)

Informations ajoutées:

Apparemment, ma tentative d'un exemple générique déroute les gens! Avec les parenthèses (précédemment) manquantes dans le premier exemple. :(

Le premier exemple provient d'une ligne de mon code qui supprime le <tbody> pour toutes les lignes avec une case à cocher cochée:

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

Le deuxième exemple provient d'une situation dans laquelle je cherche dans les #classesTable toutes les cases à cocher cochées et supprime l'élément correspondant dans une liste déroulante.

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

Je comprends qu’ils font deux choses différentes, mais pas au point de pouvoir dire: "Je dois utiliser $ .each () dans ce cas et .each (function () {}) dans un autre cas.

Sont-ils interchangeables? Seulement dans certains cas? Jamais?

78
marky

Description:

.each est un itérateur utilisé pour parcourir uniquement la collection d'objets jQuery, tandis que jQuery.each ($.each) est une fonction générale permettant d’itérer sur des objets et des tableaux javascript.

Exemples:

Tableau Javascript (ou objet js) utilisant $ .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

Objets jQuery utilisant .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

Si vous recherchez d'autres exemples + détails, $. Each vs .each ()

Ressources

99
Phil

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

La fonction $ .each () n’est pas la même chose que .each (), utilisée pour itérer exclusivement sur un objet jQuery. La fonction $ .each () peut être utilisée pour parcourir toute collection, qu’il s’agisse d’une carte (objet JavaScript) ou d’un tableau.

5
tig

Vous voulez vraiment utiliser $.each avec un tableau qui n'est pas des éléments ou quelque chose. c'est à dire:

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

Vous utiliseriez $.each(x... pour traverser cela au lieu de x.each :)

.each est uniquement pour les éléments :)

3
Michael Wright

Le premier lancera la fonction de rappel sur les éléments de la collection que vous avez transmise, mais votre code n’est pas correct du point de vue syntaxique pour le moment.

CA devrait etre:

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

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

La seconde exécutera la fonction sur chaque élément de la collection sur laquelle vous l'exécutez.

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

1
StuperUser

Il n'y a pas de différence fonctionnelle. Chaque objet jQuery possède une méthode .each() héritée de jQuery.fn. En appelant ce object method, JQuery sait déjà à quel Array (-like object) itérer. En d'autres termes, il boucle sur le indexed propertys De l'objet jQuery actuel.

$.each() n'est en revanche qu'un "outil d'aide" qui boucle sur tout type de Array ou Object, mais vous devez bien sûr indiquer à cette méthode quelle est votre cible. vouloir itérer.
Il prendra également soin de vous, que vous passiez dans un tableau ou un objet, il fait ce qu'il faut en utilisant un for-in Ou for loop Sous le capot.

1
jAndy

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

La fonction $.each() diffère de la fonction .each(), utilisée pour itérer exclusivement sur un objet jQuery. La fonction $.each() peut être utilisée pour parcourir toute collection, qu'il s'agisse d'une carte (objet JavaScript) ou d'un tableau. Dans le cas d'un tableau, le rappel reçoit un index et une valeur de tableau correspondante à chaque fois. (La valeur peut également être consultée à l'aide du mot-clé this, mais Javascript l'enveloppera toujours comme un objet, même s'il s'agit d'une simple chaîne ou d'un nombre.) La méthode retourne son premier argument, l'objet qui a été itéré.

0
Odnxe

Dans le premier cas, vous pouvez effectuer une itération sur des objets jQuery et d'autres éléments de tableau, comme indiqué ici:

jQuery.each ()

Dans le second cas, vous pouvez uniquement parcourir les objets jQuery comme indiqué ici:

. each ()

0
Jamie Dixon

D'après ce que je comprends, $.each(); parcourt un objet ou un tableau et vous donne l'itérateur et la valeur de chaque élément.

$().each(); parcourt une liste d'objets jQuery et vous donne l'itérateur et l'objet jQuery.

0
Seth