You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用jQuery 4.0.0 Beta2时fotorama.js报sort函数不存在错误,求修复

修复jQuery 4.0.0 Beta2中fotorama.js的$frames.filter(...).sort is not a function错误

问题原因

jQuery 4.0.0 Beta2正式移除了jQuery集合对象上的.sort()方法,而fotorama.js作为已停止维护的库未适配该变更,导致调用.sort()时触发类型错误。

修复方案

将原代码中对jQuery对象调用.sort()的逻辑,改为先转换为原生DOM数组,使用原生Array.sort()排序后再转回jQuery对象,具体修改如下:

修改后的完整frameAppend函数:

function frameAppend ($frames, $shaft, type) {
  if (!frameAppend[type]) {

    var thumbsFLAG = type === 'nav' && o_navThumbs,
        left = 0;

    $shaft.append(
      $(
        $frames
            .filter(function () {
              var actual,
                  $this = $(this),
                  frameData = $this.data();
              for (var _i = 0, _l = data.length; _i < _l; _i++) {
                if (frameData.data === data[_i]) {
                  actual = true;
                  frameData.eq = _i;
                  break;
                }
              }
              return actual || $this.remove() && false;
            })
            .get() // 将jQuery集合转为原生DOM元素数组
            .sort(function (a, b) {
              return $(a).data().eq - $(b).data().eq;
            })
      )
      .each(function () {

        if (!thumbsFLAG) return;

        var $this = $(this),
            frameData = $this.data(),
            thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide;

        frameData.l = left;
        frameData.w = thumbwidth;

        $this.css({width: thumbwidth});

        left += thumbwidth + opts.thumbmargin;
      })
    );

    frameAppend[type] = true;
  }
}

关键修改点

  1. 在.filter()方法后添加.get(),将jQuery对象转换为原生DOM元素数组
  2. 对原生数组使用Array.sort()完成排序逻辑(排序函数逻辑保持不变)
  3. 用$(...)将排序后的数组重新包装为jQuery对象,确保后续.each()方法能正常链式调用

内容的提问来源于stack exchange,提问作者backups

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:21:15