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

Angular 6升级至15后jQuery.each中this指向错误导致height获取失败

问题解决方案

错误原因

在jQuery的.each()回调中使用箭头函数会导致this指向异常。箭头函数不会绑定自身的this,它会继承外部作用域的this(此处为你的服务类实例),而非当前遍历的DOM元素。升级jQuery后,这种指向错误触发了Cannot read properties of undefined (reading 'defaultView')报错。

修复方案

方案1:改用普通函数作为.each()回调

将箭头函数替换为普通函数,此时this会指向当前遍历的DOM元素:

setElHeight(element: any) {
    element.height('auto');
    if (element.length) {
        let maxheight: number = 0;
        element.each(function() {
            // 此处this指向当前遍历的DOM元素
            let max_height = $(this).height() ?? 0;
            maxheight = max_height > maxheight ? max_height : maxheight;
        });
        element.height(maxheight);
    }
}

方案2:通过.each()的参数获取当前元素

如果偏好使用箭头函数,可以利用.each()回调的第二个参数(当前DOM元素)来获取目标元素:

setElHeight(element: any) {
    element.height('auto');
    if (element.length) {
        let maxheight: number = 0;
        element.each((index: number, el: HTMLElement) => {
            // el是当前遍历的DOM元素
            let max_height = $(el).height() ?? 0;
            maxheight = max_height > maxheight ? max_height : maxheight;
        });
        element.height(maxheight);
    }
}

为什么替换成$(element)不行?

element是传入的整个jQuery集合(所有匹配的.div .content h4元素),而非单个元素,所以$(element).height()只会获取集合中第一个元素的高度,导致后续元素的高度未被正确计算,出现部分内容高度错误的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 07:15:09