2012-09-06 89 views
5

我的整體問題是懶加載圖像。我已經到了只在屏幕上加載圖像的地步。我需要刪除不在屏幕上的圖像。jquery刪除圖像

我想

$(image).removeAttr("src") 

會做它,它正確地消除SRC,但它不清除屏幕上的圖像,也沒有什麼是ALT代替它。

如何讓它刪除圖像?請注意,我不想刪除img標籤(我稍後需要它),只需從屏幕上清除圖像即可。

其他代碼,可能是相關的(雖然我爲什麼不知道) -

updateCarImages:=> 
    imagesOnScreen = $(@el).find(".carImageClass:onScreen") 
    imagesOffScreen = _.without(cachedImagesOnScreen,imagesOnScreen) 
    for image in imagesOnScreen 
     imgSrc = $(image).attr("src") 
     if (!imgSrc) 
     id = $(image).data("tooltip-id") 
     console.log(id) 
     result = resultsStore.get(id+"") 
     console.log(result) 
     $(image).attr("src", result.get("carImageUrl")) 
    console.log(imagesOffScreen) 
    for image in imagesOffScreen 
     $(image).removeAttr("src") 
+0

向我們顯示您的代碼。 – freebird

+0

請解釋「刪除圖片但保留IMG標籤」的邏輯。隱藏不可見的圖像有什麼意義? – David

+0

,因爲當他們在屏幕上時我會再次加載它們 – praks5432

回答

4

如果你想清除內存(這在我看來是刪除不可見圖像的唯一原因)你是爲一程。

有沒有防彈的方式來強制瀏覽器做到這一點。瀏覽器調用垃圾收集器的唯一方法是達到一定的內存限制,然後提示收集器應該先採用什麼。

移動節點的垃圾桶內和空它被認爲是一個好辦法:

var $trash = $('<div>').hide().appendTo('body'); 

var waste = function(node) { 
    $trash.append(node).html(''); 
} 

你可能會得到幸運與空GIF替換源:

$(image).attr('src','data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAA‌​LAAAAAABAAEAAAICRAEAOw%3D%3D'); 

這也將保持節點和圖像寬度/高度。

但是我非常懷疑這樣做會導致你的情況有任何性能上的提升,最好的辦法就是不要用太多的數據壓縮瀏覽器。

適用於iPad(特別是版本4.x)的iOS以低內存限制而聞名,如果您留下太多IMG節點,可能容易發生崩潰。

3

如果您的問題是性能,那麼你可以使用預先存在的懶加載的jQuery插件。重新發明車輪毫無意義。

http://www.appelsiini.net/2012/lazyload-170


另外,如果你不希望使用這個插件,你可以在src值存儲在data-*屬性,當你想要顯示它只是將其連接到src

當隱藏

$(image).data("src", $(image).attr("src")); 
$(image).removeAttr("src"); 
$(image).hide(); 

當顯示

$(image).attr("src", $(image).data("src")); 
$(image).show(); 
+0

但我想刪除圖像,因爲如果我有大量的圖像,它不會讓我減慢速度。 – praks5432

+0

即隱藏他們將打敗我試圖做的目的,這只是當他們在屏幕上加載圖像,並在他們關閉時將其刪除 – praks5432

+0

@ praks5432請參閱我的編輯。我認爲你試圖重新發明輪子 – Curt

2

隱藏圖像:

$(image).hide(); 

這將設置在圖像上style="display:none;",使其不會出現


刪除圖像:

$(image).remove(); 

這將物理上與DOM,因此不再存在

刪除

混合方法(將圖像留在DOM中並允許您ch以後再來)

//Remove the SRC and hide the image 
$(image).removeAttr("src").hide(); 

//Then when you want to change to a new image 
$(image).attr("src", "iamge.gif").show(); 
1

你可以簡單地隱藏圖像。如果你不笏去那裏,你也許可以創造一個1px的圖像比:

$(image).attr('src', '1px.png'); 
+1

或'$(image).attr('src','data:image/gif; base64,R0lGODlhAQABAPABAP /// wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D');'在IE8 + – David

1

如果你想隱藏圖像,但保持到位的佔用其空間和不影響方面容器的滾動條,使用visibility: hidden風格:

$(image).css('visibility', 'hidden'); 
0

您可以簡單地從該代碼中刪除圖像。我試過了。

$('.img2').dblclick(function() 
{ 
    $(".img2").removeAttr('src'); 
});