Je travaille actuellement sur ce tutoriel: Mise en route 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();
});
});
Notez que dans le premier exemple, nous utilisons $(this)
pour ajouter du texte à l'intérieur de chaque élément li
. Dans le deuxième exemple, nous utilisons directement this
lors de la réinitialisation du formulaire.
$(this)
semble être utilisé beaucoup plus souvent que this
.
Mon hypothèse est dans le premier exemple, $()
convertit chaque élément li
en un objet jQuery qui comprend la fonction append()
alors que dans le second exemple, reset()
peut être appelé directement la forme.
Fondamentalement, nous avons besoin de $()
pour des fonctions spéciales réservées à jQuery.
Est-ce correct?
Oui, vous n’avez besoin que de $()
lorsque vous utilisez jQuery. Si vous voulez que jQuery vous aide à faire les choses dans le DOM, gardez cela à l'esprit.
$(this)[0] === this
En gros, 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, il sera dans le premier élément.
$("#myDiv")[0] === document.getElementById("myDiv");
Etc...
$()
est la fonction constructeur jQuery.
this
est une référence à l'élément d'invocation DOM.
Donc, fondamentalement, dans $(this)
, vous ne faites que passer le this
dans $()
en tant que paramètre pour pouvoir appeler des méthodes et des fonctions jQuery.
Oui, vous avez besoin de $(this)
pour les 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 utiliser this
.
Lorsque vous utilisez jQuery
, il est conseillé d'utiliser $(this)
en général. Mais si vous connaissez (vous devez apprendre et connaître) la différence, il est parfois plus pratique et plus rapide d’utiliser simplement this
. Par exemple:
$(".myCheckboxes").change(function(){
if(this.checked)
alert("checked");
});
est plus facile et plus pur que
$(".myCheckboxes").change(function(){
if($(this).is(":checked"))
alert("checked");
});
this
est l'élément, $(this)
est l'objet jQuery construit avec cet élément
$(".class").each(function(){
//the iterations current html element
//the classic JavaScript API is exposed here (such as .innerHTML and .appendChild)
var HTMLElement = this;
//the current HTML element is passed to the jQuery constructor
//the jQuery API is exposed here (such as .html() and .append())
var jQueryObject = $(this);
});
Un regard plus profond
this
MDN est contenu dans un contexte d'exécution
La portée fait référence au courant contexte d'exécutionECMA. Pour comprendre this
, il est important de comprendre le fonctionnement des contextes d'exécution en JavaScript.
les contextes d'exécution lient ceci
Lorsque le contrôle entre dans un contexte d’exécution (le code est exécuté dans cette étendue), l’environnement pour les 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 ce
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.
callback.apply( obj[ i ] )//where obj[i] is the current element
Le résultat de l'appel de apply
est que à l'intérieur des fonctions de rappel jQuery, this
fait référence à l'élément en cours utilisé par le rappel une fonction.
Par exemple, dans .each
, la fonction de rappel couramment utilisée autorise .each(function(index,element){/*scope*/})
. Dans cette étendue, this == element
est vrai.
les callbacks jQuery utilisent la fonction apply pour lier la fonction appelée à l'élément en cours. 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 à sélecteuraPI jQuery utilisé pour instancier l'objet jQuery.
$(selector)
appelle la fonction jQuery (rappelez-vous que $
est une référence à jQuery
, code: window.jQuery = window.$ = jQuery;
). En interne, la fonction jQuery instancie un objet fonction. Ainsi, bien que cela ne soit pas immédiatement évident, utiliser $()
en interne utilise new jQuery()
. Une partie de la construction de cet objet jQuery consiste à rechercher toutes les correspondances du sélecteur. Le constructeur acceptera également les chaînes html et les éléments . Lorsque vous passez this
au constructeur jQuery, vous transmettez l'élément en cours pour qu'un objet jQuery soit construit avec . 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 de this
).
Une fois que l'objet jQuery est construit, l'API jQuery est maintenant exposée. Lorsqu'une fonction jQuery api est appelée, elle itérera en interne sur cette structure semblable à un tableau. Pour chaque élément du tableau, il appelle la fonction de rappel de l'api, liant le this
du rappel à l'élément actuel. Cet appel peut être vu dans l'extrait de code ci-dessus où obj
est la structure de type tableau, et i
est l'itérateur utilisé pour la position dans le tableau de l'élément actuel.
Oui, en utilisant $(this)
, vous avez activé la fonctionnalité jQuery pour l'objet. En utilisant simplement this
, il ne dispose que de la fonctionnalité Javascript générique.