2011-07-29 73 views
2

如何使用.each()獲取var,使用它,清除它,然後從下一個.each()循環開始新鮮?使用jQuery .each()在多個圖像下添加標題屬性。

我有不同數量的圖像'title'屬性。我想獲取title屬性,並在每個圖像之後將它附加到一個新的div,創建一個標題。然而,在具有2個圖像的頁面上使用下面的代碼,我在每張圖像下都可以看到它們的標題。

我該如何運行.each(),以便它在第一個圖像上工作,擦除它的var,然後是否在第二個圖像上工作?

jQuery(".node-type-article .imagefield-imagelink img").each(function() { 
    var caption = jQuery(this).attr('title'); 
    jQuery(this).after('<div class="caption"></div>'); 
    jQuery('.caption').append(caption); 
    caption = ''; 
}); 
+1

爲什麼你需要清除標題變量? – b01

+1

這裏是什麼工作: 的jQuery( '節點型文章.imagefield-IMG ImageLink的。 ')每個(函數(){jQuery的 (本)。經過( 的jQuery('

') 的.text。 (jQuery(this).attr('title')) ); }); – mtro

+0

我喜歡JQuery,雖然很多事情在一行上感覺很優雅 – Coops

回答

0

每次迭代都會開始一個新的範圍。您不需要erasevar caption,因爲迭代後它會自動超出範圍。

0

你的問題是在這裏:

caption = '';

這將工作:

jQuery(".node-type-article .imagefield-imagelink img").each(function() { 
    var caption = jQuery(this).attr('title'); 
    jQuery(this).after('<div class="caption"></div>'); 
    jQuery('.caption').append(caption); 
    this.title = ''; //or the jQuery way --> $(this).attr('title',''); 
}); 
0

您的罪魁禍首是:jQuery('.caption').append(caption);

這將發現與類標題的所有對象,並追加標題文本。

你所面積大約看到的是一個標題一個標題,然後用一個2

修復的方法是添加next聲明,所以不是:

jQuery('.caption').append(caption); 

你這樣做:

$(this).next('.caption').html(caption); 
// $ and jQuery are the same thing btw 

編輯

抱歉忘了添加,你不需要清除標題變量。

因爲您已經在each函數中定義了您的變量,所以每次都會創建一個新變量。

3

這是違規的路線。它匹配兩個div的:

jQuery('.caption').append(caption); 

這樣做:

jQuery(".node-type-article .imagefield-imagelink img").each(function() { 
    var caption = jQuery(this).attr('title'); 
    jQuery(this).after('<div class="caption">' + caption + '</div>'); 
}); 

此外,您不需要清除標題變種。每次調用該函數都是本地的。