In realtà jQuery è un wrapper per il DOM JavaScript, sia migliorando e semplificando esso. molto brevemente JQuery selettori ritornano JQuery Oggetto/s cioè
var jQueryResults = $("article"); //Contains all article elements in the DOM as JQuery objects
Tuttavia, selezionando gli elementi con JavaScript restituisce elementi HTML DOM vale a dire
var normalResults = document.getElementsByTagName("article");//Contains all article elements in the DOM as HTML objects
I problemi sorgono in quanto oggetti DOM non forniscono la stessa funzionalità che Forniscono oggetti JQuery.
Ecco un esempio evento che illustra la differenza:
$('.changeColorHover').hover(function() {
this.attr("style", "color:red");
}); //Will not work as we are trying to call a JQuery method on a DOM object
Con la suddetta in mente il 'questo' parola chiave è un oggetto DOM e quindi si sono tenuti a convertirlo in un oggetto jQuery in ordine utilizzare i metodi jQuery.
$('.changeColorHover').hover(function() {
$(this).attr("style", "color:red");
}); //Will work since we have first converted the DOM object to a JQuery object
In sintesi, la parola chiave this, permette di accedere l'oggetto che ha chiamato l'evento come questo darà un riferimento all'oggetto che ha generato l'evento. Ma questo è un oggetto DOM, non un oggetto jQuery. Di conseguenza, nessuno dei metodi jQuery che desideri utilizzare non sono disponibili, a meno che non lo converti in un oggetto jQuery.
sì, è un idioma jquery –
@Matt: non c'è jQuery nel codice. Assegnare 'this' a un'altra variabile è anche molto comune in" plain JavaScript ". –
@Felix: è un plugin, il che significa che si riferisce a un oggetto jQuery. C'è (o era) un idioma jquery per prefissare oggetti jquery con $. quindi, è una domanda jquery. Se non fosse jQuery, invece di $ questo probabilmente vedresti, quello, se stessi, o qualcosa di più descrittivo su ciò che in realtà significa –