Использование разных версий jQuery на одной странице - PullRequest
2 голосов
/ 17 июня 2010

Пользователи моего сервиса включают JS в свои страницы, которые я предоставляю.Я размещаю сценарий, который они включают.Мой скрипт выполняет некоторые манипуляции с их содержимым.Мне надоело писать собственные манипуляторы / селекторы DOM и тратить часы на задания, которые можно выполнить с помощью одной строки кода, если я могу использовать jQuery.

Некоторые пользователи моего сервиса уже используют jQuery (или Prototype).и т.д.) на их страницах, поэтому, если я включу jQuery, возникнет конфликт.Поскольку будут различия в версиях, я не хочу использовать их селекторы jQuery, а также методы, если jQuery существует.

Помня, что я не могу контролировать их страницы, как я могу включить jQuery и избежатьконфликт?

Ответы [ 3 ]

6 голосов
/ 17 июня 2010

Короткая версия: Вы не можете .

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

.noConflict() работает против других библиотечных конфликтов, но вы не беспокоитесь о $ здесь, вы переопределяете объект jQuery, это , где возникают проблемы. Например, он запускает обработчики и т. Д. При запуске, если он переопределяется другой версией на странице ... ну, ну, проблемы могут возникать быстро.

Еще один замечательный пример: события хранятся / доступны $.data(elem, 'events'), который использует $.cache (внутренне, откройте консоль на этой странице, проверьте ее), который будет переопределен , потеряв обработчики событий и здравый смысл вместе с ним:)

0 голосов
/ 06 сентября 2011

Для этого сначала добавьте первую версию jQuery, например: scr = "/ jquery-1.2.3.js", а затем под ней добавьте:

var jq123 = jQuery.noConflict (true);

Итак, чтобы теперь вызывать эту версию jQuery вместо «$», используйте «jq123», например, я хотел бы вызвать функцию меню Lavalamp, используя эту версию jQuery, я бы сделал:

    jq123(function() {

        jq123("#1, #2, #3").lavaLamp({

});

    });

Вместо: $ (function () {

        $("#1, #2, #3").lavaLamp({

});

    });

Затем вы добавляете другую версию jQuery без каких-либо изменений, например: и вы будете вызывать функции в ней обычно с символом "$". Я надеюсь, что это помогло.

0 голосов
/ 22 июля 2010

В основном мне были нужны селекторы, поэтому на днях я наткнулся на это: Sizzle , движок селектора CSS на чистом JavaScript, разработанный для простого добавления в хост-библиотеку.

Может использоваться для предотвращения конфликтов с любыми другими экземплярами Sizzle. Я очень рад, что нашел это решение.

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