避免jQuery和jQuery扩展中的冲突!

避免jQuery和jQuery扩展中的冲突!,jquery,jquery-plugins,Jquery,Jquery Plugins,我在CMS扩展中使用jQuery和一些非常常见的jQuery插件(包括jQueryUI和jQueryTools以及许多其他插件),在一些CMS扩展中,许多人在各种情况下使用这些插件。我总是会遇到我的扩展插件和同一CMS页面上另一个扩展插件添加的插件之间存在冲突的问题。有时,另一个扩展加载jQuery插件的早期版本,它会杀死我的实例 我想“重命名”或“包装”(到一个具有唯一名称的插件中)我的扩展使用的所有插件,这样即使在同一页面上有相同插件的其他实例,我的实例也不会受到任何影响 如果可能的话,将所

我在CMS扩展中使用jQuery和一些非常常见的jQuery插件(包括jQueryUI和jQueryTools以及许多其他插件),在一些CMS扩展中,许多人在各种情况下使用这些插件。我总是会遇到我的扩展插件和同一CMS页面上另一个扩展插件添加的插件之间存在冲突的问题。有时,另一个扩展加载jQuery插件的早期版本,它会杀死我的实例

我想“重命名”或“包装”(到一个具有唯一名称的插件中)我的扩展使用的所有插件,这样即使在同一页面上有相同插件的其他实例,我的实例也不会受到任何影响

如果可能的话,将所有插件包装成一个插件将是理想的解决方案,而不是重命名

有什么建议吗,这可能吗

非常感谢,
诺曼。

也许在这里你能找到答案


您可以将插件封装在匿名函数中,并使用特定版本的jquery调用它们

例如:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  (function($){
    // All references to $ in this block will refer to $jq14
    // Put plugins inline here
  })($jq14);
</script>

$jq13=jQuery.noConflict(true);
$jq14=jQuery.noConflict(true);
(函数($){
//本栏中对$jq14的所有引用均指$jq14
//把插件放在这里
})($jq14);
编写良好的插件已经以这种方式编写,所以您只需更改最后一行来设置它应该使用哪个jquery对象

也可以在调用每个插件之前更改window.jquery。像这样:

<script src="jquery-1.3.js"></script>
<script>
  $jq13 = jQuery.noConflict(true);
</script>

<script src="jquery-1.4.js"></script>
<script>
  $jq14 = jQuery.noConflict(true);
</script>

<script>
  window.jQuery = $jq14;
</script>
<script src="some_plugin.js"></script>

<script>
  window.jQuery = $jq13;
</script>
<script src="some_other_plugin.js"></script>

$jq13=jQuery.noConflict(true);
$jq14=jQuery.noConflict(true);
window.jQuery=$jq14;
window.jQuery=$jq13;

稍微不那么优雅,但它应该可以工作。

实际上,您应该始终只使用一个jQuery实例,大多数插件都应该使用say。。jQuery 1.3.2。如果您正在使用其他插件,如mootools,您可以在兼容模式下运行jQuery-请参阅Yeah。。。这不仅仅是关于jQuery库的冲突。。。插件呢。。。如果所有插件都可以包装在一个唯一的父插件中,然后在实际插件前面加上父插件的名称来调用它们,那就太好了。。。或者,即使插件可以被分配到一个唯一的变量,以避免冲突。