Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plugins 在Joomla站点中使用多个jQuery版本,而不重命名jQuery_Plugins_Joomla_Jquery - Fatal编程技术网

Plugins 在Joomla站点中使用多个jQuery版本,而不重命名jQuery

Plugins 在Joomla站点中使用多个jQuery版本,而不重命名jQuery,plugins,joomla,jquery,Plugins,Joomla,Jquery,我知道我的问题与其他许多问题相似,但我希望细节上的差异足以证明一个新问题的合理性。我正在开发的joomla网站使用mod_superfishmenu。这将加载jQuery 1.2.6。并将其扩展。我正在创建一个使用jQuery colorbox插件的组件,该插件需要jQuery 1.3或更高版本,并再次扩展jQuery。两者兼有的一种技术是使用jQuery.noConflict()将jQuery重新分配给另一个名称。比如说, <script type='text/javascript' s

我知道我的问题与其他许多问题相似,但我希望细节上的差异足以证明一个新问题的合理性。我正在开发的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>

var jQuery1=jQuery.noConflict(true);
然后将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>

var oldJquery=null;
if(jQuery!=未定义){
oldJquery=jQuery.noConflict(true);
}
jQuery.noConflict();
if(oldJquery){
for(oldJquery.fn中的插件){
if(!(jQuery.fn中的插件))
jQuery.fn[plugin]=oldJquery.fn[plugin];
}
}

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

为什么不简单地更改mod_superfishmenu并删除包含jQuery 1.2.6的行?这样,您的jQuery colorbox插件将加载jQuery 1.3本身,mod_菜单也将使用它。简单的一行更改并不困难


作为补充说明,我认为所有Joomla开发人员(包括任何javascript库)都应该有后端设置,以便用户在发生冲突时启用或禁用任何库。

您不能只使用jQuery 1.3吗?这还应该提供所有的1.2.6函数。这不仅增加了页面加载时间,而且还自找麻烦。@iHaveacomputer,它是一个joomla模块,用于加载jQuery 1.2.6。我可以使用jQuery 1.3并将其放在模块的javascript目录中,但我还是不希望更改标准(如果过时)模块。@Michael Mior,我可以编辑joomla模块的代码,这样它就不会加载自己的jQuery,但如果我能帮上忙,我更希望不更改预打包的代码。mod_superfishmenu模块只是一个例子,有许多joomla扩展加载它们自己的本地jQuery。这就是我设计这个替代方案的原因。正确。这是我个人的偏好。当开发者的努力与用户体验发生冲突时,我倾向于用户体验。(顺便说一句,像这样的事情是我再也不会碰Joomla的原因。)通常都是这样。问题是,我的组件包括jQuery1.4。因此,当页面显示另一个组件(例如com_内容)时,superfish菜单将停止工作。joomla默认包含的唯一框架是mootoolsSimple,然后从组件中删除jQuery,并将其保留在SuperFlash菜单中。或者删除所有jQuery并将其作为包含添加到模板中。煮鱼的方法很多。