Использование jQuery.noConflict
Сложилась такая ситуация, что на одной странице надо подружить библиотеки jQuery и JsHttpRequest. А точнее скрипты, которые на них опираются. Возникает конфликт библиотек.
Вообще, рекомендуется избегать совместного использования нескольких разных библиотек и желательно, чтобы все скрипты смотрели в одну библиотеку. Но это можно обеспечить, когда речь о новом сайте. Когда же проекту уже более 5 лет, когда он обрастал за это время новыми функциями, дополнениями, переживал смену верстки и дизайна, не удивительно, что тогда бывают не только разные библиотеки на одной странице, но и несколько версий одной библиотеки — скажем, той же jQuery.
Для недостаточно опытного разработчика решить такой конфликт — это как расставить 8 ферзей на шахматной доске так, чтобы они друг друга не били )) Часы уходят на нахождение причины, еще часы на то, чтобы понять, как решить проблему.
Когда я искал решение, то, конечно, запрос «конфликт jQuery c…» дал много результатов, но удивительно, что в большинстве случаев дается теория и общий случай, а четкого примера с объяснениями нет. Поэтому решил описать свой пример здесь с выделением важных моментов.
Итак, имеем:
сlockQ.js (смотрит в jQuery.js — ориентируемся по постфиксу Q)
voteR.js (смотрит в JsHttpRequest.js — ориентируемся по постфиксу R)
bootstrap.js, которому нужен jQuery.js
Конфликт возник между voteR.js и сlockQ.js. Решаем с помощью jQuery.noConflict ()
ПОДКЛЮЧЕНИЕ СКРИПТОВ
<script src="/js/jquery.js" type="text/javascript"></script> <script src="/js/сlockQ.js" type="text/javascript" language="javascript"></script> <script src="/js/bootstrap.js" type="text/javascript"></script> <script>jQuery.noConflict()</script> <script type="text/javascript" src="/js/JsHttpRequest.js"></script> <script src="/js/voteR.js" type="text/javascript"></script>
Обращаем внимание на порядок и использование Query.noConflict
Но в таком виде работать все еще не будет. Именно со следующим шагом возникают часто проблемы. Этот момент меньше всего описан в доступном виде.
ПРАВИЛЬНЫЙ ВЫЗОВ ОДНОГО ИЗ КОНФЛИКТУЮЩИХ СКРИПТОВ (того, который смотрит в jQuery)
Нужно изменить в вызове (не путать с местом подключения) скрипта clockQ символ «$» на «jQuery»
В моем случае БЫЛО:
<script language="javascript"> $('#nyclock').clockQ({здесь параметры}); </script>
СТАЛО:
<script language="javascript"> jQuery('#nyclock').clockQ({здесь параметры}); </script>
Вот после этого скрипты должны начать работать совместно.
Успешных разработок!