如何通过普通 JavaScript 自动调整博客图像的大小?

How to auto resize blogger image by plain JavaScript?

<div><img src="https://1.bp.blogspot.com/-Cte2EwC-9PE/UsbynhiHbtI/AAAAAAAAHRE/jmGB7-eTfoY/s1600/Growing-Food-Plant.jpg" alt="demo image" style="height: 180; width: 150;"></div>

原图来源为https://1.bp.blogspot.com/-Cte2EwC-9PE/UsbynhiHbtI/AAAAAAAAHRE/jmGB7-eTfoY/s1600/Growing-Food-Plant.jpg

要更改的字符是s1600

我的工作jQuery

$('div img').each(function(n, i){
    var p = $(i);
    var w = $(this).width().toFixed();
    var h = $(this).height().toFixed();
    return p.attr('data-src' , p.attr('data-src').replace(/s\B\d{2,4}/,'w' + w + '-h' + h +'-c'));
});

裁剪后的src为https://1.bp.blogspot.com/-Cte2EwC-9PE/UsbynhiHbtI/AAAAAAAAHRE/jmGB7-eTfoY/w150-h180-c/Growing-Food-Plant.jpg

更改的字符是 w150-h180-c

现有的 jQuery 版本运行良好。但是不能处理更多图像并且有点慢。我试图将 jQuery 脚本转换为普通的 JavaScript 但它不起作用。

var divImage = document.querySelectorAll("div img");
for(var c = 0; c < divImage.length; c++) {
    var wid = divImage[c].clientWidth.toFixed();
    var hei = divImage[c].clientHeight.toFixed();
    var attr = divImage[c].getAttribute("src");
    for(var a = 0; a < attr.length; a++) {
        attr[a].replace(/s\B\d{2,4}/,'w' + wid + '-h' + hei +'-c');
    }
}

有谁可以告诉我我的脚本有什么问题吗?

提前致谢。

what's wrong with my script

您的代码无法正常工作,因为

  1. 你生成新的url
attr[a].replace(...

但不要更新图像上的属性

divImage[c].setAttribute("data-src", attr[a].replace(...
  1. 您正在使用
divImage[c].getAttribute("src")

而您的原件使用 .attr("data-src")

  1. 你正在使用 .getAttribute() 其中 returns 一个字符串然后遍历每个字母
for(var a = 0; a < attr.length; a++) 

给予:

var divImage = document.querySelectorAll("div img");
for (var c = 0; c < divImage.length; c++) {
  var wid = divImage[c].clientWidth.toFixed() || 0;
  var hei = divImage[c].clientHeight.toFixed() || 0;
  var attr = divImage[c].getAttribute("data-src");
  var newattr = attr.replace(/s\B\d{2,4}/, 'w' + wid + '-h' + hei + '-c');
  divImage[c].setAttribute("data-src", newattr);
}

$("div img").each(function() {
  console.log($(this).attr("data-src"));
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div><img data-src="https://1.bp.blogspot.com/-Cte2EwC-9PE/UsbynhiHbtI/AAAAAAAAHRE/jmGB7-eTfoY/s1600/Growing-Food-Plant.jpg" /></div>
<div><img data-src="https://1.bp.blogspot.com/-Cte2EwC-9PE/UsbynhiHbtI/AAAAAAAAHRE/jmGB7-eTfoY/s1600/Growing-Food-Plant.jpg" /></div>