Избегайте конфликтов в расширениях jQuery и jQuery!

Я использую jQuery и некоторые очень распространенные-jquery-плагины в расширениях CMS (включая jQueryUI и jQueryTools вместе со многими другими) в некоторых расширениях CMS, которые используются многими людьми в самых разных ситуациях. Я всегда сталкиваюсь с проблемами, когда есть конфликты между моими плагинами расширения и плагинами, добавленными другим расширением на той же странице CMS. Иногда другое расширение загружает более раннюю версию плагина jQuery и убивает мой экземпляр.

Я хочу "переименовать" или "обернуть" (в один плагин с уникальным именем) все плагины, которые используют мои расширения, чтобы мой экземпляр никоим образом не пострадал, даже если есть другие экземпляры одного и того же плагинов на одной странице.

Объединение всех плагинов в один плагин было бы идеальным решением, если это возможно - вместо переименования.

Любые предложения, возможно ли это?

Спасибо, Norman.

Ответ 1

Вы можете обернуть плагины в анонимную функцию и вызвать их с конкретной версией jquery.

Пример:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  (function($){
    // All references to $ in this block will refer to $jq14
    // Put plugins inline here
  })($jq14);
</script>

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

Или вы можете изменить window.jquery перед вызовом каждого плагина. Вот так:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  window.jQuery = $jq14;
</script>
<script src="some_plugin.js"></script>

<script>
  window.jQuery = $jq13;
</script>
<script src="some_other_plugin.js"></script>

Немного менее изящный, но он должен работать.