我在CMS扩展中使用jQuery和一些非常常见的jquery-plugins(包括jQueryUI和jQueryTools以及许多其他)在一些CMS扩展中,许多人在各种情况下使用它们。我总是遇到问题,我的扩展插件和插件在同一个CMS页面上的另一个扩展插件之间存在冲突。有时另一个扩展会加载早期版本的jQuery插件,它会杀死我的实例。
我想“重命名”或“换行”(包含一个具有唯一名称的插件)我的扩展程序使用的所有插件,因此即使存在其他实例,我的实例也不会受到任何影响插件在同一页面上。
将所有插件包装到单个插件中将是理想的解决方案,如果可能的话 - 而不是重命名。
任何建议,这甚至可能吗?
非常感谢, 诺曼。
答案 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)
也许在这里你可以找到答案?