从内存中删除图像标记

时间:2012-10-15 22:14:45

标签: jquery

我看过一些代码来检查是否加载了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();
      });
  }
});

I got this code above from this post

2 个答案:

答案 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对象。

Example using nullExample using .remove()