Я был тем человеком, который создал это соглашение еще в 2006 году и продвигал его в раннем списке рассылки jQuery, поэтому позвольте мне поделиться историей и мотивацией вокруг него.
Принятый ответ дает этот пример:
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
Но это не очень хорошо иллюстрирует это. Даже без $, у нас все равно было бы два разных имени переменной, emailи email_field. Это очень хорошо, прямо там. Зачем нам нужно бросать $в одно из имен, когда у нас уже есть два разных имени?
На самом деле, я бы не использовал email_fieldздесь по двум причинам: names_with_underscoresне является идиоматическим JavaScript и fieldне имеет смысла для элемента DOM. Но я следовал той же идее.
Я пробовал несколько разных вещей, среди которых что-то очень похожее на пример:
var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it
(Конечно, объект jQuery может иметь более одного элемента DOM, но в коде, над которым я работал, было много idселекторов, поэтому в этих случаях имелось соответствие 1: 1.)
У меня был другой случай, когда функция получила элемент DOM в качестве параметра, а также для него был нужен объект jQuery:
// 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
}
Ну, это немного сбивает с толку! В одном из моих фрагментов кода emailэто объект jQuery и emailElementэлемент DOM, а в другом email- элемент DOM и emailJQобъект jQuery.
Последовательности не было, и я продолжал смешивать их. Кроме того, было немного неприятно продолжать составлять два разных имени для одной и той же вещи: одно для объекта jQuery, а другое для соответствующего элемента DOM. Кроме того email, emailElementи emailJQя продолжал пробовать и другие варианты.
Тогда я заметил общую закономерность:
var email = $("#email");
var emailJQ = $(email);
Поскольку JavaScript воспринимается $как просто еще одна буква для имен, и поскольку я всегда возвращал объект jQuery из $(whatever)вызова, шаблон, наконец, меня осенило. Я мог бы взять $(...)вызов и просто удалить некоторые символы, и это придумало бы довольно красивое имя:
$("#email")
$(email)
Зачеркнутый не идеален, но вы можете понять, что при удалении некоторых символов обе эти строки выглядят так:
$email
Вот тогда я понял, что мне не нужно составлять соглашение вроде emailElementили emailJQ. На меня уже смотрелась хорошая конвенция: убрать некоторых персонажей из $(whatever)звонка, и это превращается в $whatever.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object
а также:
// 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!
}
Поэтому мне не приходилось все время придумывать два разных имени, я мог просто использовать одно и то же имя с $префиксом или без него . И $префикс был хорошим напоминанием, что я имел дело с объектом jQuery:
$('#email').click( ... );
или:
var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );