Comment fonctionne la syntaxe «this»?

Est-ce que cette ligne

$(this).attr("id").replace("_button",""); 

équivalent à celui-ci?

 this.attr("id").replace("_button",""); 

comme this contient toujours une référence à l’ object of invocation , cela dépend vraiment de l’ endroit où vous appelez ce code.

Si vous appelez cela dans un jQuery event handler , this s’agit d’une référence à l’ DOM element lui-même. Vous devez donc le traduire en object jQuery en appelant $() avant de pouvoir appeler des méthodes jQuery. Cela signifie à son tour

 this.attr("id").replace("_button",""); 

ne fonctionnera pas là.

Si vous écrivez une méthode de plug-in par exemple, this déjà d’un jQuery object ( reference ) et les deux lignes feraient la même chose. Bien sûr, s’il s’agit déjà d’un jQuery object vous effectuez un travail supplémentaire, en essayant de le réparsingr.

Exemple:

 $.fn.yourplugin = function(){ // this refers to a jQuery object return this.each(function(i,v){ }); }); 

Cela dépend du contexte, mais probablement pas.

Si vous avez un gestionnaire d’événements, dites:

 $('#_button_foo').click(function() { $(this).attr("id").replace("_button",""); }); 

this fera ensuite référence à l’ élément DOM alors que $(this) crée un object jQuery et vous permet d’appeler des fonctions jQuery sur cet object.


De l’autre côté, si vous développez un plugin et que vous avez

 jQuery.fn.plugin = function() { this.each(function() {...}); } 

alors this fait référence à l’object jQuery sur lequel vous appelez la méthode.

this fait référence à l’object dans lequel il est utilisé. Dans la scope globale, il fait référence à window et, dans un appel de méthode, à l’object auquel la méthode est appelée.

Dans votre cas, this fera probablement référence à un élément du DOM extrait avec un autre mécanisme jQuery, tel qu’un événement ( click , hover , etc.) ou une itération sur une liste d’éléments (comme jQuery.each ). Dans ce cas, vous obtenez uniquement cet élément DOM, mais pas un object jQuery avec l’extension de méthodes jQuery telle que attr . Vous devez donc le transformer en object jQuery à l’aide de la fonction $ constructor.

Le $ (this) transformera l’object DOM en object jQuery afin que vous puissiez utiliser les fonctions jQuery.

Donc $(this) et this ne sont pas les mêmes.

En Javascript, le mot clé ” this ” fait référence à l’object dont vous êtes le contexte. Ainsi, si vous appelez myObj.method1() , dans le code de la méthode 1, ” this ” ferait référence à myObj .

Dans jQuery, la plupart des opérations renvoient un object jeu de résultats jQuery, souvent appelé wrapper jQuery. Par exemple, le sélecteur $("a") renvoie un ensemble de résultats jQuery contenant tous les éléments DOM. $("a").get(0) renverrait le premier élément DOM d’ancrage, $("a").get(1) renverrait la deuxième ancre, etc.

Donc, $(this) fait référence à l’object wrapper jQuery et à l’élément DOM.

Donc pour résumer: $(this).get(0) serait la même chose que this .

Cela dépend du contexte dans lequel vous l’utilisez.

$(this) est un object jQuery et this s’agit d’un object DOM.

Donc, ils ne sont pas pareils.

Si vous développez le plugin jquery, this revient à $(this) .

Non. On dirait que vous êtes dans le contexte d’une fermeture utilisée pour une méthode jQuery. Dans la fonction, il pointe sur l’object DOM actuel. Par conséquent, les fonctions jquery ne seraient pas possibles. C’est pourquoi il est encapsulé avec la fonction jquery pour obtenir cet object.

this fait toujours référence à l’object dont la fonction actuelle est membre. Si la fonction est globale, il s’agit généralement de l’object window , du moins si vous êtes dans un navigateur Web.

$(this) est en fait $() (la fonction principale de jQuery) appelée avec le paramètre mentionné précédemment en tant que paramètre. Cela encapsule this dans un object jQuery qui offre toutes les méthodes jQuery. Ces méthodes ne sont pas disponibles pour this .

Je pense que ce n’est pas.

Vous pouvez utiliser this.id.replace (“_ button”, “”) à la place.