Я разрабатываю некоторый JavaScript, который должен работать или с Prototype.js или с JQuery, таким образом мне нужен некоторый способ определить то, что является основной используемой библиотекой. Как я могу сделать это?
Проверить наличие jQuery можно так:
if (window.$ === window.jQuery)
Ну, вы можете проверить наличие jQuery:
if(window.jQuery !== "undefined")
{
// jQuery Yay!
}
, а затем, если он назначен на $
if(window.jQuery === window.$)
{
// jQuery Yay!
}
Может jQuery noconflict помощь? Затем вы можете использовать jQuery
для jQuery и $
для прототипа.
Я разрабатываю JavaScript, который должен работать либо с Prototype.js, либо с JQuery, поэтому мне нужен способ определить, какая основная библиотека используется. Как я могу это сделать?
Ваш вопрос неоднозначен, для меня есть два очевидных значения, поэтому я отвечу на оба.
Если вы имеете в виду, что хотите написать код, который будет работать независимо от того, используется ли jQuery или Prototype.js, ответ заключается в том, что довольно легко написать код, который работает независимо от библиотек, которые были или будут использоваться, загружен. Таким образом, нет необходимости выяснять, какой из них был использован.
Если вы имеете в виду, что собираетесь написать два отдельных скрипта, один для jQuery и один для Prototype.js, тогда, в зависимости от того, какой из них вы «обнаружите», вы загрузите один или другой скрипт, тогда вы будете исходить из ваш код на очень плохой архитектуре. Ни одна из этих библиотек не поддерживает особенно широкий выбор браузеров, и обе требуют обновления при выходе новой версии, даже тех «популярных», которые они поддерживают.
Попытка поддержать и то и другое с помощью отдельных сценариев создаст постоянную головную боль при обслуживании - раз два. Или, возможно, это ваше намерение.
-
Роб
@SLaks и @ Chacha102 подходят для обнаружения jQuery, но если вы хотите убедиться, что если $
функция не из jQuery, происходит из PrototypeJS, вы можете:
if (typeof $ == 'function') {
if ($.fn && $.fn.jquery) { // $.fn.jquery contains the version number
// jquery
} else if (window.Prototype && Prototype.Version) {
// prototype
}
}
Запишите его без зависимости от какой-либо библиотеки, и он должен нормально работать как с jQuery, так и с Prototype;)
Серьезно, разве не одна из основных задач этой библиотеки - избежать написания трех разных вариантов каждой строки кода для каждого браузера? Написание кода для работы с несколькими библиотеками кажется довольно глупым.
В любом случае, просмотр документации любой из библиотек в течение примерно 5 секунд должен дать вам подсказку относительно того, какие свойства jq $ будут иметь, а pt $ - нет. Это говорит о том, что вы действительно не удосужились взглянуть на различия между фреймворками (что, очевидно, будет лучшим способом отличить их друг от друга, не так ли?). Вы уверены, что знаете, во что ввязываетесь?
Как уже упоминалось несколько человек:
var whosThatDollarSign = typeof window.$=='undefined' ? 'none' : (window.$==window.jQuery ? 'jQuery' : 'not jQuery')