2013-07-14 84 views
1

我想獲得某個類的所有元素,並向它們添加順序標識,並將它們放入數組中。 這是我到目前爲止。爲類添加ID

(function(){ 
    for(var i = 1; i<$(".slideshow").length; i++){ 
     $(".slideshow").attr("id", "slides-" + i + "") 
    } 
}); 

會發生什麼事是將所有的.slideshow類的ID在同一時間,使他們都等於最後(實際上倒數第二,一個bug稍後解決)

我如何設置每個班級的ID?如果我做每個循環:

$(".slideshow").each(function(){ 
    for(var i = 1; i<$(".slideshow").length; i++){ 
     $(".slideshow").attr("id", "slides-" + i + "") 
    } 
}); 

我該如何使用「this」也許?

回答

2

由於傳遞到.each()回調函數有兩個參數:首先,集合中元素的索引,第二,元素本身,你可以寫這樣的:

$(".slideshow").each(function(i, el){ 
    el.id = 'slides-' + i; 
}); 

由於id屬性是常用支持,這裏沒有必要使用$(el).attr('id', ...)構造。

請注意,幻燈片的索引從0開始。如果你想要做這樣的原碼(1型),使用此:

el.id = 'slides-' + (i + 1); 

括號周圍i + 1子的表達是至關重要的,因爲這些應補充,而不是串聯。

沒有參數,表達式將被處理爲('slides' + i) + 1。第一個+符號放置在字符串和數字之間,因此將被視爲連接運算符,並返回String。因此,下一個+也會變成concat操作 - 例如,當i爲9時,會給您'slides-91'(而不是預期的'slides-10')。

如果需要的陣列作爲結果,只需要使用jQuery對象的.toArray()方法:

var slideShowNodes = $(".slideshow").each(function(i, el){ 
    el.id = 'slides-' + i; 
}).toArray(); 
+0

疑難雜症,並感謝!那是一些超級短代碼! –

1

逐個增加ID,並把所有的元件以陣列狀節點列表?

var arr = $(".slideshow").prop('id',function(i) { 
    return "slides-" + i; 
}).get(); 

FIDDLE