如何将jQuery更新到可以下载的最新版本?


33

我正在使用Drupal 7,它默认使用jQuery 1.4?如何将其更新到最新版本(当前为1.7)?


1
我不想使用模块,想要手动操作。
Karmacoma 2012年

即使对于最有经验的Drupal开发人员,手动在Drupal中升级jQuery也是非常复杂且危险的。您应该听Clive的建议,并使用jQuery Update。
sheena_d 2012年

我通过ftp转到misc-jquery.js文件,并替换了新的jquery代码。对?
Karmacoma 2012年

据我所知,misc-jquery.js与jquery版本并不完全相同。但是,根据git,drupalcode.org/project/jquery_update.git/tree/ refs/ heads/…,也应该有1.7支持。
AyeshK

@帕特里克·肯尼(Patrick Kenny)我认为这不正确-到目前为止,我可以使用jquery_update选择jquery 1.8
doub1ejack

Answers:


44

一种方法是安装开发人员版jQuery的更新(通过访问设置页面,从而使您能够使用jQuery 1.7的选项http://mysite.com/admin/config/development/jquery_update)。

不过请注意,目前已知会在网站的其他位置破坏JavaScript(例如,“管理字段”页面上的小部件下拉列表将不再起作用)。如果您准备好解决此问题以及其他任何小麻烦,这可能是您最好的选择。您还应该注意,使用模块的开发版本并非没有风险,因为其存在错误的机会比使用特定版本的机会要高得多。

如果您想手动执行此操作,那么您将需要重写许多核心javascript代码以使您的网站按预期工作;jQuery在1.4 / 1.5和1.7版本之间进行了很多改动,因此很多核心Drupal javascript代码根本无法使用。

如果您只想插入jQuery 1.7版本,则可以实现hook_js_alter(),取消设置核心jQuery文件,然后在其中添加自己的文件:

function MYMODULE_js_alter(&$js) {
  $path = drupal_get_path('module', 'MYMODULE') . '/path/to/jquery.1.7.js';

  // Copy the current jQuery file settings and change
  $js[$path] = $js['misc/jquery.js'];

  // Update necessary settings
  $js[$path]['version'] = 1.7;
  $js[$path]['data'] = $path;

  // Finally remove the original jQuery
  unset($js['misc/jquery.js']);
}

完成此操作后,打开Developer Tools / Firebug,您将看到要使站点JS的其余部分正常工作所需的所有更改:)

更新

现在,最新版本的jQuery更新(在撰写本文时为7.x-2.3)将允许您将jQuery更新到v1.8。很酷。

jQuery的多模块是另一种选择,这要归功于goron指出这一点的意见。正如他还指出的那样,该模块具有稳定的发行版,不会破坏任何现有的javascript。


解冻的人!我已经找了一段时间了!就我而言,我只是想为每个主题加载不同版本的jQuery,因此我仅将MYMODULE_js_alter替换为MYTHEME_js_alter,将drupal_get_path('theme','MYTHEME')替换为drupal_get_path('module','MYMODULE')
victmo

1
当心,Drupal附带了一组自己的JavaScript文件,这些文件被编写为与旧jQuery一起使用并且与jQuery 1.7或1.8不兼容。最新的jQuery Update提供了这些文件的替换文件。
皮埃尔·布伊

1
你需要的模块的开发版本,该稳定版本不具备1.7选项
克莱夫

2
jQuery Multi是另一个选项,它不需要开发版本,并且不会破坏任何JS。也许将其添加为选项或删除“唯一方法”?
goron

1
@goron好点,谢谢。现在,我将尝试尽快更新此答案中的一些答案
Clive

4

您还应该考虑使用jquery multi模块,该模块允许您使用多个版本的jquery。很棒的模块,我在所有项目中都将它用于Druapl 7和6。


2

hook_js_alter文档的启发,以下作品。您可以将其放在主题的template.php中。这要求您使用不同的管理主题以避免与Drupal核心冲突,并且假定jquery-1.8.3.min.js位于主题内名为“ js”的文件夹中(根据情况进行调整)。

function [theme_machine_name]_js_alter(&$javascript) {

  $javascript['misc/jquery.js']['data'] = drupal_get_path('theme', '[theme_machine_name]') .
    '/js/jquery-1.8.3.min.js';

  $javascript['misc/jquery.js']['version'] = '1.8.3';

}


需要不同的管理主题,是不是一个真正的解决办法,除非你能提供的主题,列表用这种方法工作。我的猜测是很少。另外,这些主题也很有可能会使用jQuery,这肯定会导致jQuery更新模块专门设计解决的问题
Clive

0

我不确定您的用途是什么,但是当我需要特定版本的自定义模块开发时,可以使用jQuery.noConflict实现

与jquery_update模块(OP似乎并不在意)相比,这是一些额外的工作,但这确实意味着您不必担心是否要弄乱整个drupal安装。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.