Переменные jquery, разница между префиксом $ и без него - PullRequest
0 голосов
/ 26 октября 2010

Я прочитал другой пост / вопрос относительно переменных jquery, и это было полезно, но у меня все еще проблемы с пониманием ... Ниже приведен фрагмент кода из простой функциональности с вкладками, которую я изменяю.

Пожалуйста, кто-нибудь может объяснить, почему это работает:

$tabMenuItem.click(function() {     
    var activetab = $(this).find('a').attr('href'); 
    $(activetab).show(); //show the active ID content
    return false;
});

.. и почему это вызывает ошибку '$ activetab.show не является функцией':

$tabMenuItem.click(function() {     
    var $activetab = $(this).find('a').attr('href'); 
    $activetab.show(); //show the active ID content     
    return false;
});

Из того, что я могу собрать, оба способа показывают, что переменная содержит правильное значение - только вторая версия не позволит мне присоединить к ней метод / функцию jquery ...?

Я не сильный программист, и любые разъяснения приветствуются!

Ответы [ 4 ]

3 голосов
/ 26 октября 2010

activetab - это href выбранного тега привязки.show() - это метод jQuery.Метод должен вызываться объектом jQuery.$(activetab) - это объект jQuery.Хотя, возможно, это не то, что вам нужно.

Если вы хотите, чтобы вторая работала и использовали $ для префикса ваших переменных, вам все равно нужно сделать ее объектом jQuery.Вы можете сделать это $($activetab).show().

2 голосов
/ 26 октября 2010

Я думаю, что вы задаете два вопроса. Сначала разница между $ и без. Большинство разработчиков используют $ перед переменной, поскольку позже они знают, что это объект jquery.

Второй вопрос, почему этот код не работает. Это потому, что вы делаете attr ('href'). который возвращает значение атрибута. Вы не можете показать, потому что show () является функцией jquery, которая показывает div в html Я думаю, что вы хотите, это оповещение или console.log.

1 голос
/ 26 октября 2010

Мне нравится думать о jQuery как об «обертке», возможно, это не самый лучший термин, но позвольте мне объяснить:
Когда вы добавляете что-то вроде $(someobj), вы по существу добавляете к этому функциональность jquery.объект;вы «оборачиваете» jQuery вокруг него.Как только вы это сделаете, у вас будет доступ ко всем функциям jQuery для этого объекта.Однако, поскольку вы «обернули» его, этот объект больше не совпадает с тем, с которого вы начали.Чтобы отслеживать, используете ли вы «обернутый» объект jQuery, вы можете добавить $ в начало имени переменной, чтобы позже, когда вы читали код, вы знали, что этот объект имеет(или не имеет) функциональность jQuery.
Примечание. Если вы хотите получить исходный объект из объекта jQuery, вы можете использовать $myjqueryobj.get().

В ваших примерах вы возвращаетеЗначение href для первого тега в выбранном элементе.Это строка, которая передается в объект jQuery следующим образом: $(activetab) обрабатывает значение href, как если бы оно было селектором (а это не так).Вы можете проверить, каково его значение, используя alert(activetab);, и вы увидите, что это не объект jQuery, а строка.

Оба метода работают одинаково, поскольку JavaScript не заботится, начинается ли переменная с$ или нет.Это только для справки программиста.

0 голосов
/ 26 октября 2010

Использование знака $ перед переменной является соглашением об именах, которое программисты JavaScript используют для определения того, что это объект jQuery. Вот хорошая статья , в которой рассматриваются некоторые распространенные соглашения об именах (см. # 3 относительно вашего вопроса). Также это хороший освежитель для программиста среднего уровня.

В вашем первом примере activetab - это коллекция объектов jquery. Выполнение $ (activetab) является избыточным и фактически создает объект jQuery из объекта jQuery. Вы можете просто сделать activetab.show ();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...