Копия jQuery

Материал из JQuery

Перейти к: навигация, поиск
jQuery.sub()

Создает копию глобального объекта jQuery, давая возможность изменять методы и параметры созданной копии, не затрагивая оригинал.

jQuery.sub():jquery1.5

Не имеет параметров.

Эта функция позволяет безопасно вносить изменения в функциональность jQuery, в частности при написании плагинов. Стоит отметить, что при использовании $.sub(), копия и оригинал не полностью изолированны друг от друга. При выполнении, все методы копии будут обращаться к функциональности оригинала.

Примеры использования

Когда возникает необходимость добавить в jQuery новые методы, не стоит торопиться делать это напрямую. Это способствует "захламлению" его пространства имен, что в дальнейшем может привести к конфликтам имен. Вместо этого, лучше создать копию jQuery, добавить туда необходимые методы и в дальнейшем, работать с ней.

//Локализуем область работы с копией jQuery. Вне этой области, копия не будет доступна.
(function(){
  var sub$ = jQuery.sub();
 
  sub$.fn.myCustomMethod = function(){
    return 'just for me';
  };
 
  sub$(document).ready(function() {
    sub$('body').myCustomMethod() // 'just for me'
  });
})();
 
typeof jQuery('body').myCustomMethod // undefined

Создадим копию jQuery, и внесем изменения в метод remove: добавим возможности устанавливать обработчики на удаление элементов:

// Локализуем область работы с копией jQuery. Вне этой области, копия не будет доступна.
(function() {
  var myjQuery = jQuery.sub();
 
  myjQuery.fn.remove = function() {
    // Организуем вызов нового события (с типом "remove").
    // В результате, станет возможно устанавливать 
    // обработчики удаления элементов со страницы.
    this.trigger("remove");
 
    // выполним оригинальный метод remove
    return jQuery.fn.remove.apply( this, arguments );
  };
 
  // воспользуемся новой функциональностью в myjQuery.
  myjQuery(function($) {
    // установим обработчик, удаляющий элементы, при нажатии.
    $(".menu").click(function() {
      $(this).find(".submenu").remove();
    });
 
    // установим обработчик, срабатывающий на удаление элементов
    $(document).bind("remove", function(e) {
      $(e.target).parent().hide();
    });
  });
})();
 
// Оригинал jQuery не будет обладать новой функциональностью.

Расширим возможности jQuery. Создадим его копию, которой добавим два новых метода, после чего добавим ее (копию) в оригинал (заняв всего одно имя в его пространстве имен):

(function(){
  var plugin = jQuery.sub();
 
  // расширим возможности копии добавив два новых метода
  plugin.fn.extend({
    open: function(){
      return this.show();
    },
    close: function(){
      return this.hide();
    }
  });
 
  // Добавим копию в оригинал
  jQuery.fn.myplugin = function(){
    this.addClass("plugin");
    return plugin( this );
  };
})();
 
// воспользуемся внесенными изменениями
$(document).ready(function(){
  $('#main').myplugin().open();
 
  // замечание: вызов $("#main").open() не сработает!
});

Ссылки

Поисковые ключи:
  • копия jquery
  • sub()