我有一个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。
非常感谢任何帮助!
答案 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
调用,如下所示:
[].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;