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

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

Обратите внимание на то, что jQuery.sub() ни в коем случае не является попыткой обособления от самой библиотеки jQuery. Все методы новой версии объекта jQuery с помощью метода sub() будут указывать на исходный (все события, запросы Ajax и т.д. будут выполняться через основной объект).

Частные случаи использования этого метода хорошо описаны в примерах ниже.

Примеры использования метода jQuery.sub()

Задача: Переопределить некоторые методы jQuery для обеспечения нового функционала.

(function() {
  var myjQuery = jQuery.sub();

  myjQuery.fn.remove = function() {
    // Новый функционал: запуск события удаления
    this.trigger("remove");

    // Гарантируем вызов оригинального метода удаления в jQuery
    return jQuery.fn.remove.apply( this, arguments );
  };

  myjQuery(function($) {
    $(".menu").click(function() {
      $(this).find(".submenu").remove();
    });

    // Новое события удаления теперь запускается из этой копии jQuery
    $(document).bind("remove", function(e) {
      $(e.target).parent().hide();
    });
  });
})();

// Обычный jQuery не запускает события remove при удалении элемента
// Эта функциональность доступна только в модифицированной версии 'myjQuery'.

Задача: Создать плагин, который возвращает специфичные плагину методы.

(function() {
  // Создаем новую копию объекта jQuery, используя sub()
  var plugin = jQuery.sub();

  // Расширяем новую копию объекта новыми методами плагина
  plugin.fn.extend({
    open: function() {
      return this.show();
    },
    close: function() {
      return this.hide();
    }
  });

  // Добавляем наш плагин к исходному объекту jQuery
  jQuery.fn.myplugin = function() {
    this.addClass("plugin");

    // Гарантируем, что наш плагин возвращает нашу специальную версию jQuery с плагином
    return plugin( this );
  };
})();

$(document).ready(function() {
  // Вызов плагина, метода open, который теперь существует
  $('#main').myplugin().open();

  // Примечание: Вызов просто $("#main").open() работать не будет, так как в обычном объекте jQuery нет такого метода!
});