Ich war die Person, die diese Konvention im Jahr 2006 ins Leben gerufen und auf der frühen jQuery-Mailingliste beworben hat. Lassen Sie mich also einen Teil der Geschichte und Motivation darüber teilen.
Die akzeptierte Antwort gibt dieses Beispiel:
var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself
Aber das zeigt es nicht wirklich gut. Auch ohne die hätten $
wir hier noch zwei verschiedene Variablennamen email
und email_field
. Das ist genau dort genug gut. Warum sollten wir einen $
in einen der Namen werfen müssen, wenn wir bereits zwei verschiedene Namen haben?
Eigentlich hätte ich email_field
hier aus zwei Gründen nicht verwendet : names_with_underscores
Sind kein idiomatisches JavaScript und field
machen für ein DOM-Element keinen Sinn. Aber ich bin der gleichen Idee gefolgt.
Ich habe ein paar verschiedene Dinge ausprobiert, darunter etwas, das dem Beispiel sehr ähnlich ist:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
(Natürlich kann ein jQuery-Objekt mehr als ein DOM-Element haben, aber der Code, an dem ich gearbeitet habe, hatte viele id
Selektoren, sodass in diesen Fällen eine 1: 1-Entsprechung bestand.)
Ich hatte einen anderen Fall, in dem eine Funktion ein DOM-Element als Parameter erhielt und dafür auch ein jQuery-Objekt benötigte:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var emailJQ = $(email);
// Now email is the DOM element and emailJQ is a jQuery object for it
}
Nun, das ist ein bisschen verwirrend! In einem meiner Codebits email
befindet sich das jQuery-Objekt und emailElement
das DOM-Element, in dem anderen email
das DOM-Element und emailJQ
das jQuery-Objekt.
Es gab keine Konsistenz und ich mischte sie weiter. Außerdem war es ein bisschen lästig, immer wieder zwei verschiedene Namen für dasselbe zu erfinden: einen für das jQuery-Objekt und einen für das passende DOM-Element. Außerdem email
, emailElement
und emailJQ
behielt ich auch andere Variationen zu versuchen.
Dann bemerkte ich ein gemeinsames Muster:
var email = $("#email");
var emailJQ = $(email);
Da JavaScript $
einfach als ein weiterer Buchstabe für Namen behandelt wird und ich bei einem $(whatever)
Aufruf immer ein jQuery-Objekt zurückbekommen habe , ist mir das Muster endlich aufgefallen. Ich könnte einen $(...)
Anruf entgegennehmen und nur einige Zeichen entfernen, und es würde sich ein ziemlich schöner Name ergeben:
$("#email")
$(email)
Strikeout ist nicht perfekt, aber Sie könnten auf die Idee kommen: Wenn einige Zeichen gelöscht werden, sehen beide Zeilen wie folgt aus:
$email
Da wurde mir klar, dass ich keine Konvention wie emailElement
oder erfinden musste emailJQ
. Es gab bereits eine nette Konvention, die mich anstarrte: Nehmen Sie einige Charaktere aus einem $(whatever)
Anruf heraus und es wird zu $whatever
.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
und:
// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
var $email = $(email);
// $email is the jQuery object and email is the DOM object
// Same names as in the code above. Yay!
}
Ich musste also nicht immer zwei verschiedene Namen erfinden, sondern konnte nur denselben Namen mit oder ohne $
Präfix verwenden. Und das $
Präfix war eine nette Erinnerung daran, dass ich es mit einem jQuery-Objekt zu tun hatte:
$('#email').click( ... );
oder:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );