2014-10-06 89 views
0

我試圖在jQuery中找到所有'img'元素的循環,並根據元素的'caption'屬性的值在它們下面放置標題。每當我運行下面的循環時,我都沒有任何圖像下的標題。jQuery for循環未運行函數

for (var i = 0; i < $('.myimage').length; i++) { 
    $('.myimage')[i].after('<h6>' + $('.myimage').attr('caption') + '</h6>'); 
}; 

然而,當我運行此代碼

$('.myimage').after('<h6>TEST</h6>'); 

單詞 'TEST' 出現下面的所有圖像。因此,我知道我的html是正確的,我沒有錯別字,選擇器正在工作,我只是無法讓for循環工作......我做錯了什麼?

回答

4

$('.myimage')[i]返回一個DOM元素(不是jQuery對象),所以沒有after方法。如果你想循環,只需使用.each

$(".myimage").each(function() { 
    //this refers to each image 
    $(this).after('<h6>' + $(this).attr('caption') + '</h6>'); 
}); 
+0

啊,謝謝你,這個工作一種享受!我沒有意識到$('。myimage')[i]會返回一個DOM對象:P – thatsimplekid 2014-10-06 20:39:11

+0

@thatsimplekid - 是的 - 你最終可能會看到類似'$(「#myID」)[0]'的東西'' - 這與'document.getElementById(「myID」)'相同 – tymeJV 2014-10-06 20:40:48

1

您可以通過.myimage元素這樣的循環,用.after()的回調函數

$('.myimage').after(function(){ 
    return '<h6>' + $(this).attr('caption') + '</h6>'; 
}); 

一個小小的音符,不要讓你自己屬性。請改用自定義數據屬性,如data-caption="something"

jsFiddle example