2015-10-21 1 views
0

Я использую jquery и prototype.js. Существует конфликт в $. Он может быть разрешен с помощью var $ j = jQuery.noConflict(), но у меня есть много файлов, которые используют $ for jquery, поэтому это было бы нелегко удалить. даже я использую некоторые плагины, которые также нужно переименовать (например, jquery.dataTables.bootstrap.js, в которых я должен перейти от $ to $ j)

Итак, мой вопрос в том, можно ли переименовать $ в prototype.js на что-то еще, так что это будет легко. Я использую прототип версии 1.5.1. не Благодаря

ответ

0

Простой ответ, нет - некоторые из модулей PrototypeJS (Array, перечислимых, RegExp, Струнные и т.д.) зависит от функции $() в наличии, и ожидать, что она возвращает расширенный элемент вместо коллекции JQuery.

Однако вы можете обернуть код jQuery в немедленно выполненную функцию, чтобы обойти вашу проблему.

, например

(function($){ 

    //jQuery code in here that uses $() 


})(jQuery); 

Это в основном Javascript замыкание, переименовывает метод jQuery() к $() в этом контексте

+0

Спасибо Geek, но как насчет плагинов, которые внутренне используют $ (в качестве ссылки на jquery, например jquery.dataTables.bootstrap.js, jquery.dataTables.min.js). Нужно ли менять их вручную, если да, если мы обновляем плагины, тогда мы должны снова сделать переделку. Не можем ли мы просто перейти к prototype.js и изменить всю ссылку $ на что-то еще. – amitdwivedie

+1

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

+0

На самом деле я сделал это и работаю хорошо, но есть одна проблема. при вызове $ (selector) .show() (для запроса). Он вызван для prototype.js, не знаю, как это сделать. Я изменил всю ссылку $ на $ p в prototype.js. – amitdwivedie

0

изменения $ к $ р вызывают некоторые проблемы (например, вызов JQuery скрыть или показать функцию, вызывается функция prototype.js). Итак, для решения конфликта нужно открыть связанные с prototype.js вещи в новой вкладке и с помощью jquery.noConflict().

Смежные вопросы