我的整体问题是延迟加载图像.我已经到了我只在屏幕上加载图像的地步.我需要删除不在屏幕上的图像.
我想
$(image).removeAttr("src")
Run Code Online (Sandbox Code Playgroud)
会这样做,它正确地删除了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")
Run Code Online (Sandbox Code Playgroud)
如果您正在尝试清除内存(据我所知,这将是删除不可见图像的唯一原因),那么您就准备好了。
\n\n没有万无一失的方法可以强制浏览器这样做。浏览器调用垃圾收集器的唯一方法是达到一定的内存限制,然后提示收集器首先应该采取什么。
\n\n将节点移动到垃圾箱并清空它被认为是一个好方法:
\n\nvar $trash = $('<div>').hide().appendTo('body');\n\nvar waste = function(node) {\n $trash.append(node).html('');\n}\nRun Code Online (Sandbox Code Playgroud)\n\n您可能会幸运地用空 GIF 替换源:
\n\n$(image).attr('src','data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAA\xe2\x80\x8c\xe2\x80\x8bLAAAAAABAAEAAAICRAEAOw%3D%3D');\nRun Code Online (Sandbox Code Playgroud)\n\n这也将使节点保持在适当的位置和图像宽度/高度。
\n\n但我非常怀疑这是否会在您的情况下带来任何性能提升,最好的办法是不要用太多数据给浏览器带来压力。
\n\niPad 版 iOS(尤其是 4.x 版)因内存限制较低而闻名,如果留下太多 IMG 节点,很容易崩溃。
\n