2017-03-02 10 views
1

RSSフィードを外部リソースから取得しているWebアプリケーションがあります。フィードから引き込まれる画像の一部は、/assets/images/image.jpgなどの相対パスです。相対パスを持つ画像は、externalsource.com/assets/images/image.jpgのような絶対パスであるために外部リソースにコールバックしないため、404秒になります。私は、ページ上のすべてのimg srcタグを収集し、すべてが絶対パスであることを保証するjavascript関数を記述したいと思います。私はすべてのimg srcsを収集するのに問題はありませんが、絶対URLでそれらを置き換えることはできません。 img srcsを印刷すると、フィードに含まれているリソースからのURLがURLに適用されます。同様にここでresource/assets/images/image.jpgJavaScriptを使用して相対的なimg srcタグを絶対パスに更新するには

は、私がこれまで持っているものです。

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に置き換えるしています外部リソース残念ながら、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">

関連する問題