2017-03-02 77 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">