2017-03-02 44 views
1

我有一个在一个RSS feed从外部资源拉动的Web应用程序的绝对路径。从Feed中拉出的一些图像是相对路径,如/assets/images/image.jpg。具有相对路径的图像最终为404,因为它们不回呼到外部资源,因为它是绝对路径,如externalsource.com/assets/images/image.jpg。我想编写一个JavaScript函数来收集页面上所有的img src标签,并确保它们都是绝对路径。我没有问题收集所有的img srcs,但不能用绝对网址替换它们。打印出img srcs时,来自拉入资源的资源的网址将应用于该网址。像resource/assets/images/image.jpg如何相对IMG SRC标签更新为使用javascript

这里是我迄今:

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");  
} 
} 

我收集所有SRC的,比较它们的正则表达式来看看它的资源URL匹配,并与来自网址替换它外部资源。不幸的是,替换网址部分是行不通的。它需要是纯粹的JavaScript和没有jQuery。

任何帮助真的很感激!

回答

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") 

不过,我想提醒广大的循环和测试逻辑的forEach循环中减少为单个呼叫replace,像这样:

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