jQuery (документ).готово и передается ‘$’

#jquery #wordpress #document-ready

#jquery #wordpress #документ готов

Вопрос:

У меня есть js-файл, который я включаю в свой шаблон WordPress. Есть ли способ получить доступ к функции ‘$’ внутри моего объекта ‘MediaBrowser’ без необходимости неуклюже передавать ее в качестве аргумента?

Спасибо, Стив

 var MediaBrowser = {
    initialize:function($){
        $("a[rel^='mediaBrowser']").prettyPhoto();
    }   
};
jQuery(document).ready(function($){
    MediaBrowser.initialize($);
});
  

Комментарии:

1. Есть ли какая-либо причина, по которой вы не можете просто использовать jQuery вместо $ ?

2. Возможно, проверьте свой рейтинг принятия, вы получите больше ответов на свои вопросы, если оставите отзыв на те, на которые уже были даны ответы.

3. @tadman: Вероятно, по той же причине у jQuery есть .noConflict метод? Я бы сказал, что можно с уверенностью предположить, что они используют jQuery явно по какой-то причине, но хотели бы иметь возможность использовать $ short-hand и не допускать, чтобы это мешало.

Ответ №1:

Используйте самозапускающуюся функцию, чтобы получить доступ к jQuery через $. Есть много причин, по которым вы хотели бы это сделать, поэтому не слушайте других людей, говорящих вам просто получить к нему глобальный доступ…

 var MediaBrowser = (function($) {
  return {    
    initialize:function(){
      $("a[rel^='mediaBrowser']").prettyPhoto();
    }
  };
}(jQuery));
  

Ответ №2:

 var MediaBrowser = {
    initialize:function(){
        var $ = jQuery; //local var or just use `jQuery` below
        $("a[rel^='mediaBrowser']").prettyPhoto();
    }   
};
jQuery(document).ready(function(){
    MediaBrowser.initialize();
});
  

Комментарии:

1. Ах, в итоге я просто добавил $ = jQuery; в функцию .ready над инициализацией. Спасибо @Neal

Ответ №3:

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

 var MediaBrowser = function() {
    var $ = jQuery;

    return {
        init : function() {
            // blah jquery stuff using $(..) syntax
        }
        ...
    }
}();
  

Комментарии:

1. Я предполагаю, что WordPress динамически загружает jquery в режиме без конфликтов. Я новичок в WP и jquery (выхожу из prototype). Спасибо за предложение.

Ответ №4:

Всегда можно обернуть в анонимную функцию (но тогда, из-за области видимости, вам нужно было бы явно создать MediaBrowser часть window :

 (function($){
    window.MediaBrowser = {
        initialize: function(){
            $('<p>').text('Sample').appendTo('body');
        }
    };
})(jQuery);


jQuery(document).ready(function(){
    MediaBrowser.initialize();
});
  

Комментарии:

1. Спасибо за предложение. Думаю, я не хотел делать это частью объекта window. Выше все было очень просто.