Как обнаружить, какая Библиотека находится позади функции $?

Я разрабатываю некоторый JavaScript, который должен работать или с Prototype.js или с JQuery, таким образом мне нужен некоторый способ определить то, что является основной используемой библиотекой. Как я могу сделать это?

16
задан Rob W 27 December 2011 в 17:08
поделиться

6 ответов

Проверить наличие jQuery можно так:

if (window.$ === window.jQuery)
19
ответ дан 30 November 2019 в 17:38
поделиться

Ну, вы можете проверить наличие jQuery:

if(window.jQuery !== "undefined")
{
    // jQuery Yay!
}

, а затем, если он назначен на $

if(window.jQuery === window.$)
{
    // jQuery Yay!
}
5
ответ дан 30 November 2019 в 17:38
поделиться

Может jQuery noconflict помощь? Затем вы можете использовать jQuery для jQuery и $ для прототипа.

3
ответ дан 30 November 2019 в 17:38
поделиться

Я разрабатываю JavaScript, который должен работать либо с Prototype.js, либо с JQuery, поэтому мне нужен способ определить, какая основная библиотека используется. Как я могу это сделать?

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

Если вы имеете в виду, что хотите написать код, который будет работать независимо от того, используется ли jQuery или Prototype.js, ответ заключается в том, что довольно легко написать код, который работает независимо от библиотек, которые были или будут использоваться, загружен. Таким образом, нет необходимости выяснять, какой из них был использован.

Если вы имеете в виду, что собираетесь написать два отдельных скрипта, один для jQuery и один для Prototype.js, тогда, в зависимости от того, какой из них вы «обнаружите», вы загрузите один или другой скрипт, тогда вы будете исходить из ваш код на очень плохой архитектуре. Ни одна из этих библиотек не поддерживает особенно широкий выбор браузеров, и обе требуют обновления при выходе новой версии, даже тех «популярных», которые они поддерживают.

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

-

Роб

1
ответ дан 30 November 2019 в 17:38
поделиться

@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
  }
}​
3
ответ дан 30 November 2019 в 17:38
поделиться

Запишите его без зависимости от какой-либо библиотеки, и он должен нормально работать как с jQuery, так и с Prototype;)

Серьезно, разве не одна из основных задач этой библиотеки - избежать написания трех разных вариантов каждой строки кода для каждого браузера? Написание кода для работы с несколькими библиотеками кажется довольно глупым.

В любом случае, просмотр документации любой из библиотек в течение примерно 5 секунд должен дать вам подсказку относительно того, какие свойства jq $ будут иметь, а pt $ - нет. Это говорит о том, что вы действительно не удосужились взглянуть на различия между фреймворками (что, очевидно, будет лучшим способом отличить их друг от друга, не так ли?). Вы уверены, что знаете, во что ввязываетесь?

Как уже упоминалось несколько человек:

var whosThatDollarSign = typeof window.$=='undefined' ? 'none' : (window.$==window.jQuery ? 'jQuery' : 'not jQuery')
0
ответ дан 30 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: