我看过一些代码来检查是否加载了div上的背景图像。他们正在做的是将img标记添加到内存中,但将其存储在变量中并使用它来查看图像是否加载了load事件。我的问题是$ img标记是否保留在内存中,如何在调用load事件时删除该标记。
var $div = $('div'),
bg = $div.css('background-image');
if (bg) {
var src = bg.replace(/(^url\()|(\)$|[\"\'])/g, ''),
$img = $('<img>').attr('src', src).on('load', function() {
// do something, maybe:
$div.fadeIn();
});
}
});
答案 0 :(得分:2)
您可以使用remove()删除元素。在您的情况下,新创建的<img>
元素将缓存在$img
变量中。因此,当你想删除它时,你只需:
$img.remove();
要从内存中释放变量,您可以使用:
delete $img;
虽然如果变量范围不是全局的,那么这并不是必需的,因为javascript垃圾收集器会为你处理。
此外,load()在浏览器中已弃用且不可靠,因此不鼓励使用它。来自jQuery docs:
与图片一起使用时加载事件的注意事项
开发人员尝试使用.load()解决的常见问题 快捷方式是在图像(或集合)时执行函数 图像)已完全加载。有几个已知的警告 这应该注意。这些是:
•它不能始终如一地工作,也不能可靠地跨浏览器 •如果图像src设置为与src相同,则在WebKit中无法正确触发
前 •它没有正确地冒泡DOM树 •对于已经存在于浏览器缓存中的图像,可以停止激活
加载的另一种方法是this plugin。
答案 1 :(得分:0)
只需设置$img
变量null
,就像
$img=null;
实际上$img.remove();
不会像某人那样在评论中提到这一点,而且您也不必担心,因为javascript Garbage Collector会为您和delete
执行此操作只有在声明没有var
关键字的变量时才会起作用。在$img=null
的情况下,只需将变量设为空null
对象。