2012-02-01 22 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