1

我有一个产品列表,在每个带有 jquery 的 li 元素中,我想在 li 元素的 img 中的属性 data-thumb 中显示图像。即在每个 li 元素中将 img src 的值设置为 data-thumb 的值,但是在加载时我想显示已经存在的 ajax-loader.gif。有人能引导我走向正确的方向吗?

例子:

<li data-id="7" data-thumb="http://test.com/assets/pdc/thumbs/66.png" data-img="http://test.com/assets/pdc/img/66.png" data-country="Australia" data-company="Big Farm" data-app="Tea" data-brand="Big Farm" data-package="500" class="product air-500 cat7">
    <img class="tip" data-country="Australia" data-brand="Big Farm" src="assets/img/ajax-loader.gif">
</li>

谢谢!

4

2 回答 2

3

试试这个:

// Loop through all lis with class product
$('li.product').each(function(){
    // grab a reference to the current li
    var $el = $(this);
    // get the url from its data-thumb attribute
    var url = $el.data('thumb');
    // create a new Image element to load into
    var img = new Image();
    // load callback for the new image
    img.onload = function() {
        // find the first image inside the li
        // and change its src to the url we just loaded
        $el.find('img')[0].src = url;
    }
    // set the src of our temp Image to start loading
    img.src = url;
});

代码背后的想法是,创建一个Image未附加到 DOM 的新元素,并将您的 url 加载到其中。加载后,替换内部<img>url。所以微调器应该在加载图像时显示,然后它应该被实际图像替换(现在从浏览器的缓存中加载)。

于 2013-01-04T18:49:58.773 回答
0

你可以做

$('li.product').each(function() {
    var $this = $(this);
    $this.find("img").attr("src", $this.data("thumb"))
});
于 2013-01-04T18:57:25.087 回答