2012-09-03 55 views
1

我正在将jQuery脚本动态加载到随机页面中。 有时他们支持jQuery,有时他们有其他库,有时他们根本没有任何库..jQuery - 检查是否触发了.noconflict

我需要支持所有情况,因此,首先我检查jQuery是否已加载。 不是,我使用.noconflict动态地将jQuery加载到页面中(以避免在其他库存在冲突的情况下出现冲突,daahhh),然后继续使用我的脚本。

它已经被加载的情况下,我需要知道该页面是否触发了.noconflict函数或不。 为什么?这很简单。 假设一个随机页面同时具有Prototype和jQuery(发生,是)。 网站管理员会触发jQuery的.noconflict模式,以避免与它发生冲突。 之后,我触发我的脚本,并检查jq是否已加载(是)。 然后,我必须知道天气使用$()或jQuery()方法,因为如果我继续使用$(),我可能会访问原型处理程序, 而我不想那样。

+2

一直使用'jQuery()',解决了问题。 – Musa

+1

检查'$ === jQuery' – timidboy

回答

3

.noConflict只删除$对象而不是jQuery对象。 (除非你添加true作为第一个参数。

所以,你可以随时使用jQuery()

+0

是的,我总是可以使用jQuery(),但是因为我正在将jQuery加载到页面中,所以我必须先知道使用.noconflict的天气。 –

+0

@Gal为什么你不能总是使用.noconflict? –

+0

我相信我终究可以。情况是,我正在注入jQuery到一个已经运行的页面中,我不知道jQuery是否被加载,或者任何其他库。它可能有2个库,其中noConflict已经触发(或不),我只想继续使用与原始页面相同的输入法。即将再次考虑,可能是无用的。 –

1

正如其他人说,你应该始终默认为使用完整的jQuery对象,而不是别名。如果它是一个quantity-的打字问题,推住前使用$,然后在文本编辑器中找到替换

...但是,如果你绝对,肯定必须这样做的荒谬的方式,这很简单:

​if​ ($ == jQuery) { alert("YAY"); }​​​​​​ 

下面是我使用jQuery 1.8和一个单独加载的MooTools 1.4.5在JSFiddle上制作的一个示例:运行一次,然后卸载外部MooTools并重试。

不要说我们没有警告过你。

+0

是的,我必须使用这种荒谬的方式:) –

+0

我的精神因为害怕你帮助传播到我们不幸的世界的邪恶而颤抖。但是,如果我帮助你在整个intertron中带入阴影,请考虑接受我的答案。 –

+0

耐心我的年轻编码,耐心是你必须用它来接收你所寻求的那些学分。 –

1

你可以使用:

jQuery(function($){ 
//Insert your javascript code here 

}); 

和所有的jQuery代码将在这些括号,绝不会与其他原型冲突。

+0

假设有一个运行原型的页面,然后我将jQuery注入它。如果我不运行任何jQuery函数,它是否会与已经存在的原型发生冲突? –

+0

不,它不会,当你在这些大括号之外时,你处于该原型的范围内,并且在这些大括号内,你在jQuery范围内。 –

+0

这将使内部函数在dom上运行就绪。 它相当于: jQuery.ready(function($){ }); 这可能不是他想要的。 – Benja