jQuery 更改图像大小和包含的 Div

发布于 2024-11-02 08:56:53 字数 1302 浏览 5 评论 0原文

我有一个图像包装 div 来包含图像和标题。

使用以下内容,图像包装器 div 的大小设置为图像的宽度:

$('.imgright').each(function(){
    $(this).width($(this).find('img').outerWidth());
});

如果依赖于父 div 类,我还希望使用不同的图像路径。以下方法有效:

$('.grid_12').each(function(){
    $(this).find('img').each(function(){
        $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    });
});

但是将它们放在一起并不总是可以设置图像包装器 div 的宽度。

$('.grid_12').each(function(){
    $(this).find('img').each(function(){
        $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    });
});
$('.imgright').each(function(){
    $(this).width($(this).find('img').outerWidth());
});

有什么建议吗?

感谢 2 个非常快速的答案,我已经重组了我的代码并使用 .load() 函数来获取更改后的图像详细信息。

工作代码是:

$('.grid_12').each(function(){
   $(this).find('img').each(function(){
     $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
     $(this).load(function(args){
       var newWidth = $(this).outerWidth();
       $(this).parent('.imgright').each(function(){
         $(this).width(newWidth);
       })
     })
   })
});

I have an image wrapper div to contain image and caption.

Using the following the image wrapper div is sized to be the width of the image:

$('.imgright').each(function(){
    $(this).width($(this).find('img').outerWidth());
});

I also wish to use a different image path if dependent on a parent div class. The following works:

$('.grid_12').each(function(){
    $(this).find('img').each(function(){
        $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    });
});

But putting these together does not always set the width of the image wrapper div.

$('.grid_12').each(function(){
    $(this).find('img').each(function(){
        $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    });
});
$('.imgright').each(function(){
    $(this).width($(this).find('img').outerWidth());
});

Any suggestions?

Thanks to 2 very quick answers I have restructured my code and used the .load() function to get the changed image details.

Working code is:

$('.grid_12').each(function(){
   $(this).find('img').each(function(){
     $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
     $(this).load(function(args){
       var newWidth = $(this).outerWidth();
       $(this).parent('.imgright').each(function(){
         $(this).width(newWidth);
       })
     })
   })
});

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

隔纱相望 2024-11-09 08:56:53

会不会是图片还没加载呢?
您可以在更改 ImagePath 时向图像添加加载处理程序

$('.grid_12').each(function(){
  $(this).find('img').each(function(){
    $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    $(this).load(function(args){/* find the parent div and change size */});
  });
});

Could it be that the images have not loaded yet?
You could add a load handler to the image as you change the ImagePath

$('.grid_12').each(function(){
  $(this).find('img').each(function(){
    $(this).attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
    $(this).load(function(args){/* find the parent div and change size */});
  });
});
岁吢 2024-11-09 08:56:53

对于初学者来说,您可以利用链接使您的代码更加简洁:

$('.grid_12').each(function(){
    $(this)
        .find('img')
            .each(function(){
                $(this)
                      .attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
            })
            .end()
        .width($(this).find('img').outerWidth());
});

现在,对于您的问题,发生的情况是您正在加载图像(通过更改它的 src),然后立即尝试获取其尺寸,而不首先检查查看图像是否已完成加载。

看起来这个问题可能会帮助您走向正确的方向:

如何使用 Javascript/jQuery 确定图像是否已加载?

For starters, you can leverage chaining to make your code a bit more succinct:

$('.grid_12').each(function(){
    $(this)
        .find('img')
            .each(function(){
                $(this)
                      .attr("src", $(this).attr('src').replace('/StandardImage/','/MidSizeImage/')); 
            })
            .end()
        .width($(this).find('img').outerWidth());
});

Now, as to your problem, what's happening is that you are loading an image (by changing it's src) and then immediately trying to get its dimensions without first checking to see if the image had finished loading yet.

It looks like this question may help steer you in the right direction:

How can I determine if an image has loaded, using Javascript/jQuery?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文