2011-11-02 34 views
1

我有一個html標記。我需要一個DOM樹改寫圖像的src attribute.My代碼爲波紋管......如何控制圖像預加載請求?

var markup = '<img src="abc.jpg"/>'; 
var div = document.createElement("div"); 
div.innerHTML = markup; 
(rewrite logic here(div)) 
document.body.appendChild(div); 

然而,當在3號線執行錯誤請求發送出去。

GET https://stackoverflow.com/questions/ask/abc.jpg 404(未找到)

如何可以控制此圖像預加載請求?當我將元素追加到文檔中時,發送出去。

我使用documentFragment作爲測試,它也有這個問題。

var str ='<img src="abc.jpg"/>'; 
var range =document.createRange(); 
range.selectNodeContents(document.documentElement); 
var fragment =range.createContextualFragment(str); 
+0

你究竟想達到什麼目的?該請求按照原樣發出。也許你的意思是你想推遲請求,並且/或者根本不開火? –

+0

是否爲'abc.jpg'的src指向您的圖片所在的位置,在這種情況下,該位置可能應該與您的網頁位於同一位置? – david

+0

嗨Mihalis,我想推遲這個請求。因爲在執行此語句「div.innerHTML = markup;」時圖像的src屬性不正確。我需要處理一個DOM樹來重寫uri。 – user1025181

回答

0

很簡單。使用的createElement的圖像太

如果您在圖像上使用的createElement,你可以指定一個錯誤處理程序將其

例如

var img = document.createElement("img"); 
img.onload=function() { // only add the image if found 
    var div = document.createElement("div"); 
    div.appendChild(this); 
    document.body.appendChild(div); 
} 
img.src="abc.gif"; 

var div = document.createElement("div"); 
var img = document.createElement("img"); 
img.onerror=function() { 
    this.src="notfound.gif"; 
} 
img.src="abc.gif"; 
div.appendChild(img); 
document.body.appendChild(div); 

如果是由於複雜的html很難,也許你應該用一個「loading.gif」替換圖像src,然後改變圖像的src:

var imgs = document.getElementById('newDiv').getElementsByTagName("img"); 
for (var i=0;i<imgs.length;i++) { 
    img = imgs[i]; 
    img.onerror = .... 
    img.src=extractedImagesFromHtmlSnippet[i] 
} 
+0

嗨mplungjan,謝謝你的回答。輸入標記可能很複雜,不僅是圖像標記,還有其他文檔標記。如何從標記中提取圖像,然後將img對象設置爲標記? – user1025181

+0

標記可以是這樣的:

Hello World!
重寫uri指示這個img的src屬性應該被重寫。 – user1025181

+0

在jQuery中,你可以添加一個$(「#容器img」)。live(...),然後我閱讀http://forum.jquery.com/topic/error-event-with-live - 無論如何看到更新 – mplungjan