MooTools和jQuery冲突-尽管是美元安全模式
我正在尝试获取一些预先存在的MooTools代码,以便在Drupal站点中正常运行。我知道MooTools代码是独立工作的。在页面中加载MooTools库后,jQuery将停止运行 我在jQuery之后加入了MooTools,这(根据MooTools开发人员的说法)应该可以防止Moo从已经加载的jQuery库中窃取已经定义的$ 我已将Moo代码中的所有$reference转换为document.id 当我加载页面时,Moo代码起作用,而jQ代码不起作用。看起来Moo仍在从jQ窃取$variable,并为自己重新定义它。出于测试目的,我加载的Moo代码是一个简单的12手风琴脚本。如果我解决了这个问题,我需要使用更复杂的方法 Drupal广泛使用jQuery,因此使用jQ的无冲突模式是不可行的。据我所知,考虑到美元安全模式,这应该是可能的MooTools和jQuery冲突-尽管是美元安全模式,jquery,drupal,mootools,conflict,dollar-sign,Jquery,Drupal,Mootools,Conflict,Dollar Sign,我正在尝试获取一些预先存在的MooTools代码,以便在Drupal站点中正常运行。我知道MooTools代码是独立工作的。在页面中加载MooTools库后,jQuery将停止运行 我在jQuery之后加入了MooTools,这(根据MooTools开发人员的说法)应该可以防止Moo从已经加载的jQuery库中窃取已经定义的$ 我已将Moo代码中的所有$reference转换为document.id 当我加载页面时,Moo代码起作用,而jQ代码不起作用。看起来Moo仍在从jQ窃取$variabl
我正在使用MooTools Core 1.2.4和MooTools More 1.2.4.4以及jQuery 1.2.6(也尝试了1.4.2)。这更多地取决于您案例中使用的插件。jQuery本身可能运行良好,但如果插件不是按照他们的建议编写的,它将无法运行。这更多地取决于您案例中使用的插件。jQuery本身可能工作正常,但如果插件不是按照他们的建议编写的,它将无法工作。您可以始终使用
jQuery()
而不是使用$
访问jQuery函数
您甚至可以在使用.ready()
时传递自己的标识符,例如:
jQuery(document).ready(function(myIdentifier){
myIdentifier(); // this is the jQuery reference!
});
与使用
$
访问jQuery函数不同,您可以始终使用jQuery()
您甚至可以在使用.ready()
时传递自己的标识符,例如:
jQuery(document).ready(function(myIdentifier){
myIdentifier(); // this is the jQuery reference!
});
奇怪的是,老实说,这不是应该发生的事情。由于mootools 1.2.3(?(可能是1.2.1),如果在页面上已经定义了$,它将不会接管分配。也就是说,如果装载顺序如下所述:
jquery
穆托尔斯
…然后moootools将自动进入兼容模式并恢复为document.id。唯一一个不正确的例子是,如果jquery是以noConflict模式加载的,这将阻止它将jquery分配给$,并且mootools没有理由不获取它
不管怎样,这就是理论。如果您看到的是不同的行为,那么浏览器有问题。您是延迟加载还是非阻塞/并行加载脚本
这里的最佳实践通常是,将jquery保持在本机模式(不带noConflict)下,并将$重新分配给document.id,以便在如下范围内处理mootools:
<div id="foo"></div>
最近有很多关于这个主题的问题,请通读最新的问题。如果失败,请向您的项目发布URL
显然,您可以使用console.log($)来检查/确认:
->testcase奇怪的是,老实说,这不是应该发生的事情。由于mootools 1.2.3(?(可能是1.2.1),如果在页面上已经定义了$,它将不会接管分配。也就是说,如果装载顺序如下所述:
jquery
穆托尔斯
…然后moootools将自动进入兼容模式并恢复为document.id。唯一一个不正确的例子是,如果jquery是以noConflict模式加载的,这将阻止它将jquery分配给$,并且mootools没有理由不获取它
不管怎样,这就是理论。如果您看到的是不同的行为,那么浏览器有问题。您是延迟加载还是非阻塞/并行加载脚本
这里的最佳实践通常是,将jquery保持在本机模式(不带noConflict)下,并将$重新分配给document.id,以便在如下范围内处理mootools:
<div id="foo"></div>
最近有很多关于这个主题的问题,请通读最新的问题。如果失败,请向您的项目发布URL
显然,您可以使用console.log($)来检查/确认:
->testcase为什么不使用
jQuery
而不是$
?
如果出于任何原因,您不能这样做,noConflict()代码>并不意味着您必须停止使用$for jQuery,您可以这样做:
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// Code that uses jQuery's $
});
// Code that uses mootools $
</script>
我在寻找加载所有或一个或任意不同库组合的解决方案时遇到了类似的问题。一旦我想好如何做到这一点,我相信我可以与你分享,你一定能够做到这一点。但是上面的解决方案应该适合您,我已经设法使用它来加载jQuery和mootools以及我想要的任何订单。为什么不使用jQuery
而不是$
?
如果出于任何原因,您不能这样做,noConflict()代码>并不意味着您必须停止使用$for jQuery,您可以这样做:
<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// Code that uses jQuery's $
});
// Code that uses mootools $
</script>
我在寻找加载所有或一个或任意不同库组合的解决方案时遇到了类似的问题。一旦我想好如何做到这一点,我相信我可以与你分享,你一定能够做到这一点。但是上面的解决方案应该适合您,我已经设法使用它来加载jQuery和mootools以及我想要的任何订单。如果我必须同时使用这两种工具,我首先包括jQuery,然后是mootools(1.3)。如果您不需要为jQuery费心,它没有冲突,因为Mootools的兼容性会自动生效,然后为Mootools定义$
,为快速快捷方式定义jQuery,即(function($){/*stuff*/})(document.id)
等等。如果必须同时使用这两种工具,我首先包括jQuery,然后是Mootools(1.3)。如果您不需要为jQuery费心,那么它没有冲突,因为Mootools兼容性会自动生效,然后为Mootools定义$
,为快速快捷方式定义jQuery,即(函数($){/*stuff*/})(