Использование JQuery и Prototype на одной странице - PullRequest
33 голосов
/ 16 января 2009

Некоторые из моих страниц используют как JQuery, так и Protoype. Поскольку я обновил JQuery до версии 1.3, это, похоже, вызывает проблемы, поскольку обе библиотеки определяют функцию с именем '$'.

JQuery предоставляет функцию noConflict (), которая передает контроль над $ другим библиотекам, которые могут его использовать. Похоже, мне нужно просмотреть все мои страницы, которые выглядят так:

<head>      
    <script type="text/javascript" src="/obp/js/prototype.js"></script>
    <script type="text/javascript" src="/obp/js/jquery.js"></script>
</head>

и измените их так:

<head>      
    <script type="text/javascript" src="/obp/js/prototype.js"></script>
    <script type="text/javascript" src="/obp/js/jquery.js"></script>
    <script type="text/javascript">
        jQuery.noConflict();
        var $j = jQuery;
    </script>
</head>

Затем я смогу использовать '$' для Prototype и '$ j' (или 'jQuery') для JQuery. Я не совсем доволен дублированием этих двух строк кода на каждой соответствующей странице и ожидаю, что в какой-то момент кто-то может забыть добавить их на новую страницу. Я предпочел бы иметь возможность сделать следующее

  • Создайте файл j query-noconflict.js, который "включает" jquery.js и две строки кода, показанные выше
  • Импорт jquery-noconflict.js (вместо jquery.js) во все мои страницы JSP / HTML

Однако я не уверен, возможно ли включить один файл JS в другой, как я описал? Конечно, альтернативное решение состоит в том, чтобы просто добавить 2 строки кода выше непосредственно в jquery.js, но если я сделаю это, мне нужно будет не забывать делать это каждый раз, когда я обновляю JQuery.

Ответы [ 12 ]

0 голосов
/ 25 мая 2010

Используйте прототип ниже jQuery, как это:

<script type="text/javascript" src="news/jquery-1.2.3.pack.js"></script>
<script type="text/javascript" src="news/jquery.easynews.js"></script>


<script type="text/javascript" src="lb/js/prototype.js"></script>
<script type="text/javascript" src="lb/js/scriptaculous.js?load=effects"></script>
<script type="text/javascript" src="lb/js/lightbox.js"></script>
<link href="lb/css/lightbox.css" rel="stylesheet" type="text/css" />

в этом случае функция jQuery создаст проблему, поэтому вы можете использовать ее для решения проблемы:

<script type="text/javascript">
     jQuery.noConflict();
     var JQ = jQuery;//rename $ function
</script>
0 голосов
/ 16 января 2009

Если бы я был на вашем месте, я бы поместил свой код без конфликтов в файл включения JavaScript, как вы описали выше, а затем выяснил, какой процесс я бы настраивал, что мне нужно включить во все мои страницы в одно центральное место. Если вы работаете с простыми HTML-файлами и у вас нет какой-либо возможности создания шаблонов / сценариев на стороне сервера для того, что включено в документ, всегда есть возможность сделать включение на стороне сервера.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...