在dom ready上,从<img/>获取所有data-src并将它们设置在src属性中

时间:2012-02-01 00:55:51

标签: javascript jquery image asynchronous attr

在一个页面中,我有这个:

<figure><img src="" data-src="img1.png"></figure>
<figure><img src="" data-src="img2.png"></figure>
<figure><img src="" data-src="img3.png"></figure>
<figure><img src="" data-src="img4.png"></figure>

继续。

我试图在不使用jquery插件的情况下进行异步加载,并使其尽可能简单。

所以我想,当dom准备好并且页面完全加载时,将data-src设置为src。

如果我这样做:console.log($('figure img').attr('data-src'))我只获得第一张图片。所以它给了我结果:img1.png

那么我怎么能说,当dom准备好所有的数字&gt; img&gt; data-src设置为该img的src。

所以从这个:

<figure><img src="" data-src="img1.png"></figure>
<figure><img src="" data-src="img2.png"></figure>
<figure><img src="" data-src="img3.png"></figure>
<figure><img src="" data-src="img4.png"></figure>

到此:

<figure><img src="img1.png"></figure>
<figure><img src="img2.png"></figure>
<figure><img src="img3.png"></figure>
<figure><img src="img4.png"></figure>

2 个答案:

答案 0 :(得分:12)

从版本1.4.3开始,jQuery直接理解了“data-”属性。所以这样做:

$('figure img').each(function() {
  this.src = $(this).data('src');
});

您必须使用.each()来分离最初选择列表中每个元素的处理,以便您执行的操作可以单独使用该元素。

答案 1 :(得分:6)

$('figure > img').prop('src',function() {
    return $(this).attr('data-src');
});

getAttribute()快一点。

$('figure > img').prop('src',function() {
    return this.getAttribute('data-src');
});

如果您确实要删除data-src,请将.removeAttr('data-src')链接到最后。

$('figure > img').prop('src',function() {
    return this.getAttribute('data-src');
}).removeAttr('data-src');