1

我看过一些代码来检查是否加载了 div 上的背景图像。他们正在做的是将一个 img 标签添加到内存中,但将其存储在一个变量中,并使用它来查看图像是否通过加载事件加载。我的问题是 $img 标签是否保留在内存中,以及在调用加载事件时如何删除该标签。

  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();
      });
  }
});

我从这篇文章中得到了上面的代码

4

2 回答 2

2

您可以使用remove()删除元素。在您的情况下,新创建的<img>元素缓存在$img变量中。因此,当您想删除它时,只需执行以下操作:

$img.remove();

要从内存中释放变量,您可以使用:

delete $img;

尽管如果变量范围不是全局的,那么这并不是真正必要的,因为 javascript 垃圾收集器会为您处理这些问题。

此外load()已被弃用且跨浏览器不可靠,因此不鼓励使用它。来自 jQuery 文档:

与图像一起使用时加载事件的注意事项

开发人员尝试使用 .load() 快捷方式解决的一个常见挑战是在图像(或图像集合)完全加载时执行一个函数。应该注意几个已知的警告。这些是:

• 它不能始终如一地工作,也不可靠地跨浏览器
• 如果图像src 设置为与以前相同的src,它不会在WebKit 中正确触发
• 它不能正确地在DOM 树中冒泡
• 可以停止触发已经存在于浏览器缓存中的图像

加载的一种替代方法是这个插件

于 2012-10-15T22:25:17.507 回答
0

将其留在垃圾收集器上,否则

只需设置$img变量null,例如

$img=null;

实际上$img.remove();不会像某人在评论中提到的那样做,而且您也不必担心,因为 javascript Garbage Collector会为您做这件事,并且delete只有在您声明没有var关键字的变量时才会起作用。在这种情况下,$img=null只是使变量成为空null对象。

使用 null的示例和使用 .remove()的示例。

于 2012-10-15T22:53:37.033 回答