如何检测$函数背后的库?

16

我正在开发一些JavaScript代码,需要同时兼容Prototype.js和JQuery库,因此我需要一种方法来识别使用的主要库。我该如何做到这一点?

我正在开发一些 JavaScript 代码,需要同时兼容 Prototype.js 和 JQuery 库,因此我需要一种方法来识别使用的主要库。我该如何做到这一点?
6个回答

19

你可以像这样检查是否存在jQuery:

if (window.$ === window.jQuery)

5

好的,您可以检查是否存在jQuery:

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

然后,如果它被分配给$

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

1
你可能是指第一个例子中的 typeof - bobince

3

@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
  }
}​

仅仅因为原型存在,并不意味着 $ 没有被覆盖。 - SLaks
SLaks,是的,它可能已经被覆盖了,这就是为什么我首先寻找jQuery的原因,但如果其他东西也这样做了,你就真的不知道了... - Christian C. Salvadó

3

您是否可以使用jQuery noconflict来帮助解决问题?这样,您就可以将jQuery用于jQuery,将$用于原型。


1
我正在开发一些JavaScript代码,旨在与Prototype.js或JQuery配合使用,因此需要一些方法来确定正在使用的主要库。如何做到这一点?
您的问题有歧义,对我来说有两个明显的含义,因此我将回答两者。
如果您的意思是要编写代码,无论是否已经使用了jQuery或Prototype.js,该代码都可以正常工作,则答案是编写代码,使其可以正常工作而不需要依赖于已加载的库相当容易,因此没有必要去发现哪一个被使用了。
如果您的意思是您将编写两个单独的脚本,一个用于jQuery,另一个用于Prototype.js,那么根据您所“检测”的脚本,您将加载其中一个脚本,然后基于这种极为糟糕的架构编写代码。这两个库都不支持特别广泛的浏览器选择,并且每当它们支持的“流行”版本更新时,都需要进行升级。
尝试使用单独的脚本来支持两种库将创建一个持续不断的维护头痛问题 - 乘以二。或许这就是您的意图。

--

罗布


0

不要依赖任何库来编写它,它应该能够与jQuery和Prototype一起正常工作 ;)

说真的,这些库的主要目的之一不是避免为每个浏览器编写三种不同版本的每行代码吗?编写代码以尝试适应多个库似乎相当愚蠢。

无论如何,看看任何一个库的文档大约5秒钟,就可以给你一个提示,jq $将具有而pt $不会具有哪些属性。这表明您似乎并没有真正关注框架之间的区别(显然这是区分它们的最佳方法,对吧?)。您确定自己知道自己在做什么吗?

正如几位已经提到的:

var whosThatDollarSign = typeof window.$=='undefined' ? 'none' : (window.$==window.jQuery ? 'jQuery' : 'not jQuery')

如果它不在结尾开始变得说教,我会投赞成票的。 - Dave Van den Eynde
不用担心,我并不会因此失眠。 - Dagg Nabbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接