使用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; } }
关键修改点
- 在
.filter()方法后添加.get(),将jQuery对象转换为原生DOM元素数组 - 对原生数组使用
Array.sort()完成排序逻辑(排序函数逻辑保持不变) - 用
$(...)将排序后的数组重新包装为jQuery对象,确保后续.each()方法能正常链式调用
内容的提问来源于stack exchange,提问作者backups
相关产品推荐
相关产品推荐

