Mootools VS JQuery а почему не совместить?

Я думаю, все очень часто сталкивались с тем, что нужно было подключить сторонние  JSскрипты. И тут возникала проблема что подключенный скрипт не работает.

Конечно, одни советую отключать Mootools, но зачем же? Ведь много компонентов используют его, да и разработчики joomlaне зря его используют тоже. 

Так тут один выход – совмещать эти библиотеки. Возникает вопрос как? Тут на помощь нам приходит

 jQuery.noConflict();

Использовать его нужно при подключении Вашего стороннего скрипта

<script type="text/javascript" src=".js">jQuery.noConflict();</script>

И еще обязательно использовать это перед тем где Вы подключаете

<jdoc:include type="head" />

Ведь именно здесь joomlaподключить все необходимые библиотеки для себя.

Также можно использовать следующие варианты:

1.  Для jQuery кода вместо $ использовать jQuery

JQuery("divspan").hide();

2.  Вместо jQuery использовать другое имя:

var k=jQuery.noConflict(); 
k("div span").hide();

А теперь давайте копнем, почему же возникает этот конфликт?

При подключении <jdoc:include type=«head» />, мы подключили и mootools. А там система зарезервировала $ за собой. Вот и возникает конфликт из-за пространства имен.

На последок, давайте поговорим про jQuery.noConflict().(очень красиво описано на http://jquery.page2page.ru)

Освобождает переменную $, чтобы избежать конфликтов имен. Метод имеет один вариант использования:

jQuery.noConflict([removeAll]);

removeAll — необязательный параметр типа boolean, при значении true функция освободит все имена переменныых, занятые библиотекой jQuery. По умолчанию, равен false.

Многие другие javascript библиотеки, так же как и jQuery используют $ как имя переменной или функции. Однако, в случае jQuery, $ является синонимом (алиасом) идентификатора jQuery. Поэтому, при освобождении имени $ с помощью jQuery.noConflict() мы не теряем функциональности библиотеки jQuery, посколько можем использовать вместо него jQuery.

<script type="text/javascript" src="other_lib.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript">   
  jQuery.noConflict(); 
  // Далее может следовать код с использованием $ других библиотек. 
</script><span>  </span>

  К сожалению, отключение идентификатора $ может привести к неправильной работе некоторых плагинов jQuery. Для этого случая существует следующий трюк:

jQuery.noConflict(); 
(function($){   
  // здесь $ будет действовать как алиас jQuery 
})(jQuery); 
// здесь $ будет доступен для других библиотек

То есть, мы можем вернуть алиас $ для jQuery локально — для кода, находящегося внутри функции, заданной указанным образом. Этот трюк можно использовать с методом .ready():

jQuery.noConflict(); 
jQuery(document).ready(function($) {   
  // здесь $ будет действовать как алиас jQuery 
}); 
// здесь $ будет доступен для других библиотек

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

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

Удачи Вам! И помните –

ВСЕ ГЕНИАЛЬНОЕ ПРОСТО НО НЕ ВСЕ ПРОСТОЕ ГЕНИАЛЬНО

11 comments
В пункте 2

2.  Вместо jQueryиспользовать другое имя:

vark=jQuery.noConflict();
вместо
k(“div span”).hide();
нужно так
vark(“div span”).hide();

 вообще то я пробел пропустил после var. Но спасибо, не заметил что упустил его)

 в HTML представлении код правь. Иначе мазня получается.

 ok. Спасибо за совет

 Перенос строки внутри параграфа (цитаты, кода) работает на Ctrl+Enter. Enter создает новый параграф.

 Благодарю за совет, вот я научался пока кусочек кода редактировал, это ужас, каждый раз в html представление переключался чтобы вставит в код <br/>. А в превью, код растянулся в одну строку, как я его не редактировал. Плюнул оставил как есть, оказалось что в статье нормально все смотрится. На параграф кода убил кучу времени, что бы более менее нормально его оформить.

Зря Вы так. Видите же что получилось. На превью может вытянуться, но в публикации все в норме становится. 

Уже тестируем обновление редактора, скоро заменим.

 Ну теперь то, буду знать :)

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

Исправил.

 спасибо, все замечания учту.

Only registered users can comment.