Javascript 如何确定IE中动态加载图像的img宽度/高度?

Javascript 如何确定IE中动态加载图像的img宽度/高度?,javascript,jquery,image,height,width,Javascript,Jquery,Image,Height,Width,我的标记是一个id为“load”的简单div元素。然后使用jQuery将图像元素列表加载到此div中: $('#load').load('images.html', { }, function() { $(this).onImagesLoad({ selectorCallback: function() { ....do something.... } }); }); 其中images.html是如下所示的列表: <img src='1.jpg' ca

我的标记是一个id为“load”的简单div元素。然后使用jQuery将图像元素列表加载到此div中:

$('#load').load('images.html', { }, function() {
  $(this).onImagesLoad({
    selectorCallback: function() {
      ....do something....
    }
  });
});
其中images.html是如下所示的列表:

<img src='1.jpg' caption='img 1'>
<img src='2.jpg' caption='img 2'>
...

...
为了确保所有图像都被完全加载,我使用了这个插件。到目前为止,这在所有浏览器上都能正常工作

然而,在IE8上(我也假设IE的其他版本),当我迭代img元素时,我无法确定加载的图像的宽度/高度。image.context.naturalWidth和naturalHeight属性似乎不起作用

我如何掌握图像的维度

谢谢你:)

更新

@西蒙:这在IE上不起作用,也破坏了其他浏览器


@Jenechka:如果“ImageDomeElement”只是上面示例中“image”变量的另一个名称,那么它就不起作用。或者你说的DomeElement是什么意思?

如果你还没有调整图像的大小,你可以使用:

image.width()

或尝试

imageDomElement.clientWidth
imageDomElement.clientHeight

如果您使用jquery,那么image.attr(width)应该可以做到这一点
但是为什么不使用document.ready来代替它呢,它可以减少你的头痛

这与其他答案非常相似,但我已经在IE7中对其进行了测试,因此它可能更接近您想要的:

$(document).onImagesLoad({
  selectorCallback: function() {
      $('img').each(function(){
         alert($(this).width()+', '+$(this).height()); 
      });
  }
});

看,这可能不是您使用它的确切方式,但我不熟悉onImagesLoad这个东西。

请使用以下代码

$(document).onImagesLoad({
      selectorCallback: function() {
          $('img').each(function(){
             alert($(this)[0].clientWidth +', '+$(this)[0].clientHeight); 
          });
      }
    });

已经有一段时间了,但我终于找到时间再次修补这个。上述问题仍然存在,但我认为这是正在发生的事情

当我加载初始图像时,如果是,则加载文件并生成图像对象。但是这些属性似乎还不正确,直到图像被实际添加到站点的DOM中并进行渲染,它们才会正确。IE上hide()上的div/image没有任何维度信息,Safari上有一些可用信息。例如,不在任何地方添加以下div

var test = $("<div><img src='test.jpg'></div>")
生成与我上面必须处理的相同的“空”图像对象。即使原始图像可见并包含所有正确的属性,其克隆也不可见

现在,除了重新思考和重写我画廊的部分内容,我看不到任何其他方法。

那怎么办

$("#load img").each(function() {
   var img = new Image();
   img.src = this.src;
   alert(img.height + " x " + img.width);
});

是否有任何理由使用$(this)[0].clientWidth而不是this.clientWidth?请参阅我对Ryley最初文章的评论。感谢链接,但那里的代码没有反映该场景。我没有将元素嵌入到()中,而是从外部.html文件加载一个元素列表。我怀疑额外加载图像元素、将它们嵌入DOM以及在“图像就绪”时调用回调(无论对浏览器意味着什么!)会导致我在不同浏览器上看到的问题。
var test = $("<div><img src='test.jpg'></div>")
var newimg = img.clone()
$("#load img").each(function() {
   var img = new Image();
   img.src = this.src;
   alert(img.height + " x " + img.width);
});