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

时间:2010-07-03 23:55:03

标签: jquery jquery-plugins

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

我想“重命名”或“换行”(包含一个具有唯一名称的插件)我的扩展程序使用的所有插件,因此即使存在其他实例,我的实例也不会受到任何影响插件在同一页面上。

将所有插件包装到单个插件中将是理想的解决方案,如果可能的话 - 而不是重命名。

任何建议,这甚至可能吗?

非常感谢, 诺曼。

2 个答案:

答案 0 :(得分:3)

您可以将插件包装在匿名函数中,并使用特定版本的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>

编写良好的插件已经以这种方式编写,因此您只需更改最后一行即可设置应该使用的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>

稍微不那么优雅,但它应该有效。

答案 1 :(得分:0)

也许在这里你可以找到答案?

Two jQuery versions on the same page