2012-02-01 21 views
3

在页面我有这样的:DOM的准备,从<img>的得到所有数据-src和设置它们的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> 

和继续。

我想做一个异步加载而不使用jquery插件,并尽可能简单。

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

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

那么我该怎么说呢,什么时候准备好了所有的图> img> data-src设置为src的那个img。

所以从这个:

<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> 

回答

13

由于版本1.4.3左右,jQuery的已经明白 “数据 - ” 属性直接。因此,只要做到这一点:

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

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

+0

+1不使用'ATTR()':) – Phrogz 2012-02-01 01:03:34

+3

@Phrogz,尖尖的:使用'。数据()'是整洁,伟大的,如果您需要在后面与数据的工作,但如果没有,使用'.attr()'会更快,并且不会为数据创建不必要的永久引用。 – 2012-02-01 01:06:03

+1

...但'this.src'肯定更好,所以+1。 – 2012-02-01 01:09:51

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'); 
+0

我正在拍我的前额**这么难**现在没有吸收这个工程的事实。 – Pointy 2012-02-01 01:04:00

+1

@Pointy:你的意思是函数参数? :) – 2012-02-01 01:04:41

+0

你们其中一个需要发布所有技术的基准:) – Phrogz 2012-02-01 01:06:53