【问题标题】:Get height of image inside a hidden div获取隐藏 div 内图像的高度
【发布时间】:2011-04-15 05:36:59
【问题描述】:

我想在隐藏的 div 容器中获取图像的高度/宽度,但 .height().width() 都返回 0(如预期的那样)。


$('body').append('<div id="init"><img id="myimg" src="someimage.png" /></div>');
$('#init').hide();
$('#myimg').height(); // == 0
$('#myimg').width(); // == 0

如何获得正确的图像高度/宽度?我需要它来做一些决定:-)

最好的问候, 大佬

【问题讨论】:

  • 如果您阅读 cmets,您会发现@Yi Jiang 说他自己的答案是错误的。
  • 您能否将您接受的答案(是的,您可以这样做)更改为罗伯特的答案,因为他是正确的,而我不是。谢谢。

标签: jquery


【解决方案1】:

是的,因为图像尚未加载,这是我的解决方案:

$('<img src="My Image URL" />').appendTo('body').css({
                'position': 'absolute',
                'top': -1
            }).load(function() {
                console.log('Image width: ' + $(this).width());
                console.log('Image height: ' + $(this).height());
                $(this).remove();
            });

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。问题是,如果包含图像的图像或 div 具有 style="display:none" 则其 css 高度 = 0。我发现 height() 和 width() 函数给出了错误的值,例如 0! 我的解决方案是确保图像设置了它们的属性,因此即使它们被隐藏,值仍然可以访问。所以使用:

    $('#testImg').attr('height') 和 $('#testImg').attr('width') 获取图片的高度和宽度。

    【讨论】:

      【解决方案3】:

      我刚刚遇到了这个解决方案,你所做的是而不是依赖 jQuery 来为你做这件事。相反,获取 javascript 元素并获取元素本身的高度,如下所示:

      var img = hiddenDiv.children('img');
      
      var imgHeight = img.get(0).height;
      var imgWidth = img.get(0).width;
      

      jQuery 方法 get(0) 允许我们获取底层 DOM 元素,有趣的是,DOM 元素的尺寸不会改变。

      但请注意,出于性能原因,如果您打算更多地使用 img.get(0),则需要缓存它。

      jQuery get method documentation

      【讨论】:

      • 谢谢。这是唯一对我有用的答案,因为加载完成后我试图获取的图像位于隐藏的 div 中。
      • “很有趣”是正确的!假设 'img' 代表单个目标元素......不知道为什么 img.height 和 img.get(0).height 返回不同的结果,但我很高兴 .get() 版本存在!谢谢塞缪尔
      • 这应该是公认的答案。附加图像然后隐藏它可能会起作用,但它不像这种方法那么干净。
      • 我希望我能多次投票。这是我在 NaN 数小时后遇到的最佳解决方案。完美运行。谢谢你,塞缪尔。
      【解决方案4】:

      因为图片还没有加载.....

      $('body').append('<div id="init"><img id="myimg" src="something.png" /></div>');
      $('#init').hide();
      
      $('#myimg').bind("load",function(){
          alert(this.height) //works
      })​
      

      这是一个测试:http://jsfiddle.net/WMpSy/

      【讨论】:

      • 它有效,但解释不正确。当然,需要先加载图片,但是如果图片在隐藏的 div 内,即使在加载图片之后,jQuery 的 height() 和 width() 方法仍然会返回 0。这个解决方案之所以有效,是因为它使用了 JavaScript元素,而不是 jQuery 元素 - 即 this.height 而不是 $(this).height()。有关更多详细信息,请参阅下面的 Samuel 回复。
      【解决方案5】:

      我不确定您是否可以使用 jQuery(或根本没有 javascript)来做到这一点。我在加载/隐藏img 时误报了高度和宽度,我遇到了类似的问题。但是,您可以等到图像加载后,获得正确的高度和宽度,然后隐藏父级......就像这样:

      var height, width;
      
      $('#myimg').load(function() {
          height = $(this).height();
          width = $(this).width();
          $('#init').hide();
      }
      

      【讨论】:

        【解决方案6】:

        你必须使用 find()

        $('body').find('#myimg').width();
        

        $('body').find('#myimg').attr("width");
        

        因为你是在加载 DOM 之后添加的

        【讨论】:

        • 错了,为什么有ID还要找?
        • 我遇到了同样的问题,我已经通过使用 find() 修复了它。
        【解决方案7】:

        看起来您需要计算图像的高度和宽度。如果是这样,你想得太多了。

        【讨论】:

        • -1 除非您解释为什么,或者他的替代方案可能是什么,否则这没有用。
        • 想得太难了。
        【解决方案8】:

        如果您想要正确的高度和宽度,则无法隐藏它,但您可以将其移动到屏幕之外,从而有效地隐藏它。试试这个:

        var hiddenDiv = $('<div id="init"><img id="myimg" src="someimage.png" /></div>').appendTo('body').css({
            'position': 'absolute',
            'top': -9999
        });
        
        var img = hiddenDiv.children('img');
        img.height();
        img.width();
        

        【讨论】:

        • 正如您在我的帖子中指出的那样,这是加载缓存的图像,OP 应该检查两个答案。
        • @Robert 我已经完成了测试——display: none 元素确实有高度——输入$('#answer-3761104').hide().height() 给出了正确的高度——所以这个答案是完全错误的。
        • 我认为应该是image load event
        • @Yi Jiang,RobertPitt:我对这个解决方案没有任何问题,因为我通过直觉使用了绑定到“加载”,其中我调用了 height() 和 width() :-) 所以这可以作为就像罗伯特皮特的解决方案一样好。
        【解决方案9】:

        使 div 暂时可见以计算高度或将 div 隐藏在屏幕外,而不是使用 display: None。我使用了第一种方法,发现它足够快,你永远看不到元素。

        【讨论】:

        • 是的,即使它足够慢以显示绝对位置加上 -1000 边距之类的东西,也应该在可见期间隐藏它。
        猜你喜欢
        • 2012-10-26
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多