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

使用jQuery获取列表内图片尺寸时返回0该如何解决?

问题原因

代码执行时机早于图片加载时机。浏览器解析HTML构建DOM树时,只会完成标签结构的初始化,不会等待外部图片资源下载完成,此时img标签的天然宽高还未被浏览器计算,所以调用width()、height()返回值为0。li属于DOM结构元素,DOM树构建完成后就可以直接读取尺寸,因此不会出现该问题。

修复方案
  • 方案1:监听窗口load事件,等待所有资源加载完成后执行逻辑

该方案会等待页面内所有图片、样式、字体等静态资源全部加载完成后再执行代码,适合需要批量处理所有列表图片的场景

// 替换原有逻辑,包裹在load事件回调内
$(window).on('load', function() {
  $("ul.company-list li img").each(function(index) {
    var imgHeight = $(this).height();
    var imgWidth = $(this).width();
    var imProp = imgWidth / imgHeight;
    console.log(imgHeight);
  });
});
  • 方案2:给单个图片绑定load事件,加载完成后立即读取尺寸

该方案不需要等待所有页面资源加载,对应图片加载完成后就会触发逻辑,性能更优

$("ul.company-list li img").each(function(index) {
  // 图片已经加载完成的直接读尺寸,没加载完的等load事件触发后再读
  if (this.complete) {
    handleImgSize($(this))
  } else {
    $(this).on('load', function() {
      handleImgSize($(this))
    })
  }
})

// 封装尺寸处理逻辑
function handleImgSize($img) {
  var imgHeight = $img.height();
  var imgWidth = $img.width();
  var imProp = imgWidth / imgHeight;
  console.log(imgHeight);
}
  • 方案3:预加载获取尺寸(适用于图片还未插入DOM的场景)
$("ul.company-list li img").each(function(index) {
  const src = $(this).attr('src')
  const tempImg = new Image()
  tempImg.src = src
  tempImg.onload = function() {
    // 此处可以直接拿到图片原始宽高,不需要等待DOM渲染
    console.log(this.height, this.width)
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:33:01