在Joomla站点中使用多个jQuery版本而无需重命名jQuery

时间:2011-07-07 02:59:45

标签: plugins joomla jquery

我知道我的问题与其他许多问题相似,但我希望具体细节足以证明一个新问题的合理性。我正在使用的joomla网站使用mod_superfishmenu。这加载了jQuery 1.2.6。并扩展它。我正在创建一个使用jQuery colorbox插件的组件,它需要jQuery 1.3或更高版本,并再次扩展JQuery。两种方法都是使用jQuery.noConflict()将jQuery重新分配给另一个名称。例如,

<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>
<script type='text/javascript'>
var jQuery1 = jQuery.noConflict(true);
</script>

然后将colorbox的JavaScript代码中的jQuery的所有实例更改为jQuery1,并确保在superfish模块加载其jQuery之前加载所有这些实例。但我不喜欢编辑颜色框代码,或者如果我升级到更新的版本,请记得再次编辑它。所以,我认为可能首先加载旧的jQuery,然后使用jQuery.noConflict(true)重命名它,然后加载当前的jQuery,并将附加到第一个jQuery的插件传输到第二个jQuery。复制插件的部分如下所示:

<script type='text/javascript'>
var oldJquery = null;
if (jQuery != undefined) {
  oldJquery = jQuery.noConflict(true);
}
</script>

<script type='text/javascript'  src='http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js'>
</script>

<script type='text/javascript'>
jQuery.noConflict();
if (oldJquery) {
  for (plugin in oldJquery.fn) {
    if (!(plugin in jQuery.fn))
      jQuery.fn[plugin] = oldJquery.fn[plugin];
  }
}
</script>

这似乎有效,但我担心我忽略了一些可以在以后咬我的细节。因此,如果有人发现这种方法存在缺陷,请指出。我也欢迎任何批评,说明为什么这是一个坏主意。感谢。

1 个答案:

答案 0 :(得分:0)

为什么不对mod_superfishmenu进行简单的更改并删除包含jQuery 1.2.6的行?这样你的jQuery colorbox插件将加载jQuery 1.3本身mod_superfishmenu也将使用。简单的一行改变并不难做到。

作为附注,我认为所有包含任何javascript库的Joomla开发人员都应该有后端设置,以便用户在发生冲突时启用或禁用任何库。