如何访问使用jquery $()后创建的对象.load?

时间:2013-11-18 21:53:27

标签: javascript jquery filter

下面的代码效果很好,除了我想访问我的函数中返回的数据但是对象还没有完成加载,所以我无法访问对象属性?

 $images = $loaded_data.find('img').filter(function () {
     if ($(this).attr('src').match(/\.(jpg|png|gif)$/i)) {
        return $(this);
    }
  })

var $image_first = $images.filter(function () {
var theImage = new Image();

    theImage.src = $(this).attr("src");
    $(theImage).load(function () {
        if (theImage.width > 200) {
            goodImages = $(this);
            return goodImages;
        }

    });
}).first();

alert($image_first.attr('src'))

在上述代码运行之前,如何阻止警报运行?


解释我想要做的事情。

我正在加载一个html块,过滤它以取出宽度超过200的所有图像,然后取出第一个并使用它作为新闻文章的源URL。

1 个答案:

答案 0 :(得分:1)

var images = $loaded_data.find('img').filter(function () {
    return this.src.match(/\.(jpg|png|gif)$/i);
}),
    promises = [],
    loaded   = [];

$images.each(function(i, image) {
    var img     = new Image(),
        promise = $.Deferred();

    img.onload = function() {
         promise.resolve();
    };

    img.src = image.src;
    promises.push(promise);
    loaded.push(img);
});

$.when.apply($, promises).done(function() {
    var $image_first = $(loaded).filter(function() {
        return $(this).width() > 200;
    }).first();

    alert($image_first);
});