Je travaille actuellement sur ce tutoriel: Premiers pas avec jQuery
Pour les deux exemples ci-dessous:
$("#orderedlist").find("li").each(function (i) {
$(this).append(" BAM! " + i);
});
$("#reset").click(function () {
$("form").each(function () {
this.reset();
});
});
Remarquez dans le premier exemple, nous utilisons $(this)
pour ajouter du texte à l'intérieur de chaque li
élément. Dans le deuxième exemple, nous utilisons this
directement lors de la réinitialisation du formulaire.
$(this)
semble être utilisé beaucoup plus souvent que this
.
Ma conjecture est dans le premier exemple, $()
convertit chaque li
élément en un objet jQuery qui comprend la append()
fonction alors que dans le deuxième exemple reset()
peut être appelé directement sur le formulaire.
Fondamentalement, nous avons besoin $()
de fonctions spéciales jQuery uniquement.
Est-ce correct?
javascript
jquery
this
Kevin Wu
la source
la source
Réponses:
Oui, vous n'avez besoin que
$()
lorsque vous utilisez jQuery. Si vous voulez que jQuery vous aide à faire des choses DOM, gardez cela à l'esprit.Fondamentalement, chaque fois que vous récupérez un ensemble d'éléments, jQuery le transforme en objet jQuery . Si vous savez que vous n'avez qu'un seul résultat, ce sera dans le premier élément.
Etc...
la source
$(this)[0]
plusthis
si elles sont toujours les mêmes?$(this)[0]
Je l'utilisais juste pour illustrer le concept. :) Je ne l' utilise$("#myDiv")[0]
plusdocument.getElementById("myDiv")
que.$()
est la fonction constructeur jQuery.this
est une référence à l'élément DOM d'invocation.Donc, fondamentalement, dans
$(this)
, vous passez simplement l'entréethis
en$()
tant que paramètre pour pouvoir appeler des méthodes et des fonctions jQuery.la source
Oui, vous avez besoin
$(this)
de fonctions jQuery, mais lorsque vous souhaitez accéder aux méthodes javascript de base de l'élément qui n'utilisent pas jQuery, vous pouvez simplement utiliserthis
.la source
Lors de l'utilisation
jQuery
, il est conseillé d'utiliser$(this)
généralement. Mais si vous connaissez (vous devez apprendre et connaître) la différence, il est parfois plus pratique et plus rapide d'utiliser simplementthis
. Par exemple:est plus facile et plus pur que
la source
this
est l'élément,$(this)
est l'objet jQuery construit avec cet élémentUn regard plus profond
this
MDN est contenu dans un contexte d'exécutionLa portée fait référence au contexte d'exécution actuel ECMA . Pour comprendre
this
, il est important de comprendre le fonctionnement des contextes d'exécution en JavaScript.les contextes d'exécution lient ce
Lorsque le contrôle entre dans un contexte d'exécution (le code est en cours d'exécution dans cette étendue), l'environnement des variables est configuré (environnements lexical et variable - essentiellement cela crée une zone pour les variables à saisir qui étaient déjà accessibles, et une zone pour les variables locales à stocké), et la liaison de
this
se produit.jQuery lie ceci
Les contextes d'exécution forment une pile logique. Le résultat est que les contextes plus profonds de la pile ont accès aux variables précédentes, mais leurs liaisons peuvent avoir été modifiées. Chaque fois que jQuery appelle une fonction de rappel, il modifie la liaison this en utilisant
apply
MDN .Le résultat de l'appel
apply
est qu'à l' intérieur des fonctions de rappel jQuery, sethis
réfère à l'élément courant utilisé par la fonction de rappel.Par exemple, dans
.each
, la fonction de rappel couramment utilisée permet.each(function(index,element){/*scope*/})
. Dans cette portée,this == element
c'est vrai.Les rappels jQuery utilisent la fonction apply pour lier la fonction appelée avec l'élément courant. Cet élément provient du tableau d'éléments de l'objet jQuery. Chaque objet jQuery construit contient un tableau d'éléments qui correspondent à l' API jQuery du sélecteur qui a été utilisée pour instancier l'objet jQuery.
$(selector)
appelle la fonction jQuery (rappelez-vous que$
c'est une référence àjQuery
, code:)window.jQuery = window.$ = jQuery;
. En interne, la fonction jQuery instancie un objet fonction. Donc, bien que cela ne soit pas immédiatement évident, l'utilisation en$()
internenew jQuery()
. Une partie de la construction de cet objet jQuery consiste à trouver toutes les correspondances du sélecteur. Le constructeur accepte également les chaînes et les éléments html . Lorsque vous passezthis
au constructeur jQuery, vous passez l'élément actuel pour un objet jQuery à construire . L'objet jQuery contient alors une structure de type tableau des éléments DOM correspondant au sélecteur (ou simplement l'élément unique dans le cas dethis
).Une fois l'objet jQuery construit, l'API jQuery est maintenant exposée. Lorsqu'une fonction api jQuery est appelée, elle itère en interne sur cette structure de type tableau. Pour chaque élément du tableau, il appelle la fonction de rappel pour l'API, liant les rappels
this
à l'élément actuel. Cet appel peut être vu dans l'extrait de code ci-dessus où seobj
trouve la structure de type tableau, eti
est l'itérateur utilisé pour la position dans le tableau de l'élément en cours.la source
Oui, en utilisant
$(this)
, vous avez activé la fonctionnalité jQuery pour l'objet. En utilisant simplementthis
, il n'a qu'une fonctionnalité Javascript générique.la source
this
référencer un objet javascript et$(this)
utilisé pour encapsuler avec jQuery.Exemple =>
la source