如何使用javascript将相对img src标记更新为绝对路径

时间:2017-03-02 23:58:00

标签: javascript html image

我有一个Web应用程序,它从外部资源中提取RSS源。从Feed中提取的一些图像是相对路径,例如/assets/images/image.jpg。具有相对路径的图像最终为404,因为它们不回调外部资源,因为它是像externalsource.com/assets/images/image.jpg这样的绝对路径。我想编写一个javascript函数来收集页面上的所有img src标记,并确保它们都是绝对路径。我收集所有的img srcs没有问题,但不能用绝对url替换它们。打印出img srcs时,来自提取源的资源的URL将应用于URL。与resource/assets/images/image.jpg

一样

这是我到目前为止所做的:

var images = document.getElementsByTagName('img');
var srcList = [];
for(var i = 0; i < images.length; i++) {
var pattern = new RegExp('^https?:\/\/fiddle\.jshell\.net(\/)');
if (pattern.test(images[i].src)){
    var sources = images[i].src;
        images[i].src = sources.replace("^https?:\/\/fiddle\.jshell\.net(\/)", "http://duo.com");
   console.log(images[i].src);  
}else{
    console.log("no match");    
}
}

我正在收集所有srcs,将它们与正则表达式进行比较以查看它是否与资源url匹配,并将其替换为来自外部资源的url。不幸的是,更换网址部分无论如何都无法正常工作。它需要是纯粹的javascript而不是jquery。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

看起来您将字符串传递给String#replace的第一个参数:

images[i].src = sources.replace("^https?:\/\/fiddle\.jshell\.net(\/)", "http://duo.com")

你可能想要传递正则表达式(注意使用/而不是";这表示JS中的正则表达式字面值:

images[i].src = sources.replace(/^https?:\/\/fiddle\.jshell\.net(\/)/, "http://duo.com")

但是,我建议您将大部分循环和测试逻辑简化为replace循环内的forEach调用,如下所示:

&#13;
&#13;
[].forEach.call(document.getElementsByTagName('img'), function (image) {
  image.src = image.src.replace(/^https?:\/\/fiddle\.jshell\.net\//, 'http://duo.com/')
  console.log(image.src)
})
&#13;
<img src="http://fiddle.jshell.net/favicon.ico">
&#13;
&#13;
&#13;