我的整体问题是延迟加载图片。我已经到了我只在屏幕上加载图像的地步。我需要删除不在屏幕上的图像。
我想
$(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 :(得分:4)
如果您正在尝试清除记忆(我认为这是删除不可见图像的唯一原因),那么您就可以开车了。
没有防弹方法强制浏览器这样做。浏览器调用垃圾收集器的唯一方法是达到一定的内存限制,然后提示收集器首先应该采取什么。
将节点移动到bin并清空它被认为是一种好方法:
var $trash = $('<div>').hide().appendTo('body');
var waste = function(node) {
$trash.append(node).html('');
}
使用空GIF替换源代码可能会很幸运:
$(image).attr('src','data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw%3D%3D');
这也将保持节点和图像宽度/高度。
但是我非常怀疑任何一种情况都会导致你的情况有任何性能提升,最好的办法就是不要在浏览器上施加过多的数据。
iOS for iPad(特别是版本4.x)因内存限制较低而闻名,如果你留下太多的IMG节点,很容易崩溃。
答案 1 :(得分:3)
如果您的问题是性能,那么您可以使用预先存在的延迟加载jQuery插件。没有必要重新发明轮子。
http://www.appelsiini.net/2012/lazyload-170
或者,如果您不想使用此插件,则可以将src
值存储在data-*
属性中,并在您希望显示时将其附加到src
。< / p>
隐藏:
$(image).data("src", $(image).attr("src"));
$(image).removeAttr("src");
$(image).hide();
显示时:
$(image).attr("src", $(image).data("src"));
$(image).show();
答案 2 :(得分:2)
隐藏图片:
$(image).hide();
这会在图片上设置style="display:none;"
并使其不显示
删除图片:
$(image).remove();
这将从DOM中物理删除它,使其不再存在
混合方法(将图像保留在DOM中并允许您稍后更改)
//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();
答案 3 :(得分:1)
您可以简单地隐藏图像。如果你不去那里,你可以创建1px图像而不是:
$(image).attr('src', '1px.png');
答案 4 :(得分:1)
如果要隐藏图像,但要在占用空间而不影响容器的滚动条方面保留图像,请使用visibility: hidden
样式:
$(image).css('visibility', 'hidden');
答案 5 :(得分:0)
您只需从此代码中删除图片即可。我试过了。
$('.img2').dblclick(function()
{
$(".img2").removeAttr('src');
});
答案 6 :(得分:-1)
下面的代码显示了如何删除图像源
var image_holder = $("#preview-image-holder");
image_holder.empty();