27 votes

jQuery .each () renvoie un élément DOM et non un objet jQuery

Je pourrais être l'incompréhension de ce qui se passe mais de ce que je peut dire que je suis l'obtention d'un élément du DOM et non pas un objet jQuery lorsque j'utilise .each().

La ci-dessous ne fonctionnera pas comme this fait référence à un élément du DOM et non pas un objet jQuery

$("span[id$='_TotalItemCost']").each(function() {
    var someText = this.text();
});

Modifié pour transformer this à un objet jQuery et tout est bien

$("span[id$='_TotalItemCost']").each(function() {
    var someText = $(this).text();
});

Est-il quelque chose de funky avec mon sélecteur? Est le jQuery .each() documentation de mal et ce n'est pas un objet jQuery, mais plutôt d'un élément du DOM retourné par .each()?

28voto

Vincent Robert Points 16530

La documention est pas mal, mais vous peut mal comprendre ce qu'est un objet jQuery est.

L'objet jQuery est retourné par l' $() fonction. Donc, $("span[id$='_TotalItemCost']") est un objet jQuery qui contient chaque élément span sélectionné.

À l'aide de .each() va itérer sur les éléments contenus dans l'objet jQuery. C'est pourquoi ce est un nœud DOM et non pas un objet jQuery.

Vous avez fait la bonne chose en utilisant $(this) à utiliser les méthodes jQuery sur cet élément.

3voto

RobertPitt Points 28140

@Vincent Robert, vous avez assez bien résumé parfaitement, mais permettez-moi juste de prolonger un peu.

même si JQuery est une fonction avec des prototypes de l'extension de la racine de l'instance, il agit plus comme un objet.

si vous séparer d'objets à partir des méthodes/fonctions et de les regarder individuellement, vous comprendrez comment le jQuery interface est construite.

si penser $() comme un objet, et de penser à each() comme une méthode. vous initialiser un objet à l'aide de jQuery $() "sélecteur", qui à son tour retourne un objet qui contient uniquement les elemetns / les données que vous avez sélectionné dans le sélecteur $().

cette situation a des méthodes / fonctions que vous pouvez l'exécuter directement sur le contenu sélectionné, mais les méthodes ne doivent pas renvoyer un objet jquery parce que la plupart du temps il n'y a pas de retour nœuds mais de simples chaînes de caractères ou booléen, afin de les avoir enveloppés dans un objet jQuery serait inutile.

que votre opération s'articule autour de chaque fonction, votre pas destiné à recevoir un objet jquery là parce que chacun n'est pas spécifiquement conçu pour les nœuds et les éléments en tant que tels

par exemple, si vous voulez un objet jquery ici?

$({a:'1',b:'2'}).each(function(){
});

ce serait mauvais et inutile, c'est pourquoi les méthodes ne/ne devrait pas renvoyer des objets, sauf si la méthode est la signification de retourner un singleton ou est spécifiquement conçu pour objet de retour.

aussi, quand je dis que l'objet, im ne parle pas d'objets json en tant que tel, mais de la méthode / de prototypage d'objets.

Espérons que cette aide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X