2012-01-28 37 views
2

這裏是我的代碼(什麼我卡上是後跳)收集通過jQuery的分割數據與for循環

<script language="JavaScript" type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
var countThisMany = 4; //how many data-id's I want to count per "section" of images 
var finalString = ""; //blank var to be used later, must be defined here. 
</script> 

<img src="foo.jpg" data-id="id1" data-item="1" /> // just a bunch 
<img src="foo.jpg" data-id="id2" data-item="2" /> // of images with 
<img src="foo.jpg" data-id="id3" data-item="3" /> // data-* usage to 
<img src="foo.jpg" data-id="id4" data-item="4" /> // store two bits 
<img src="foo.jpg" data-id="id5" data-item="5" /> // of information 
<img src="foo.jpg" data-id="id6" data-item="6" /> // that I'll need 
<img src="foo.jpg" data-id="id7" data-item="7" /> // to extract 
<img src="foo.jpg" data-id="id8" data-item="8" /> // later on below. 

<img src="bar.jpg" data-id="id9" data-item="1" /> // another set of images 
<img src="bar.jpg" data-id="id10" data-item="2" /> 
<img src="bar.jpg" data-id="id11" data-item="3" /> 
<img src="bar.jpg" data-id="id12" data-item="4" /> 
<img src="bar.jpg" data-id="id13" data-item="5" /> 
<img src="bar.jpg" data-id="id14" data-item="6" /> 
<img src="bar.jpg" data-id="id15" data-item="7" /> 
<img src="bar.jpg" data-id="id16" data-item="8" /> 

<script type="text/javascript"> 
var item_array = $("img").map(function() { 
    return $(this).attr("data-item"); 
}).get(); 

//alert(item_array); 
//returns "1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8" 


var id_array = $("img").map(function() { 
    return $(this).attr("data-id"); 
}).get(); 
//alert(id_array); 
//returns "id1,id2,id3,id4,id5,id6,id7,id8,id9,id10,id11,id12,id13,id14,id15,id16" 


for (i=0;i<countThisMany;i++){ 
finalString=finalString+id_array[i]+';'; 
} 

//alert(finalString); 
//returns "id1;id2;id3;id4" -- could be more or less if "countThisMany" is changed to something other than 4 

</script> 

這整個代碼是自足,以便隨時將其保存爲HTML和取消註釋警報以查看結果。

然而,我需要的是更進一步。我想只收集img標籤,其data-item小於或等於變量countThisMany

所以finalString的最終結果將是「ID1的data-id; ID2,ID3,ID4; ID9,ID10,ID11; ID12" 。如果countThisMany改爲2,舉例來說,這將是「ID1,ID2,ID9,ID10」

我感覺好像我是如此接近但我無法弄清楚如何只收集第一第一組8張圖像中的4張和第二組8張圖像中的前4張。再次,圖像的總量和我需要捕獲的數量有所不同,因此「countThisMany」變種。

這是我第一次發佈到驚人的計算器社區,所以我很興奮!時間!

回答

2

使用filter方法

var item_array = $("img").filter(function() { 
    return parseInt($(this).data("item")) <= countThisMany; 
}).map(function() { 
    return $(this).data('id'); 
}).get(); 
+0

+1 for parseInt。不過,不要忘記基數參數。 – Tomalak 2012-01-28 20:43:43

+0

經過進一步調查,我意識到這是最好的答案,它適合我需要的非常好。 小提琴:http://jsfiddle.net/5yNbE/6/ 謝謝! – 2012-01-28 22:50:32

+0

@Tomalak - 我調查了radix參數,並不知道如何將它包含在我擁有的parseInt中。這將是X在下面,對嗎?:parseInt(x,$(this).data(「item」)) - 但在我的情況下,我不確定我需要放什麼,因爲我不完全確定基數是什麼。 – 2012-01-29 15:03:08

0
var countThisMany = 4; 
var item_array = $("img") 
    .filter(function() { 
     return parseFloat($(this).attr("data-item")) <= countThisMany; 
    }) 
    .map(function() { 
     return $(this).attr("data-id"); 
    }) 
    .toArray(); /* instead of get() */ 

注意,這會返回一個數組,你似乎想一個字符串,所以你可能要調用.join(',')的結果。

0

使用$.grep結合$.map。我還添加了一個join而不是循環。小提琴:http://jsfiddle.net/brentmn/5yNbE/5/

var countThisMany = 2; 
var finalString = ""; 

var id_array = $.grep($('img'), function(item) { 
    return ($(item).data('item') <= countThisMany); 
}).map(function(item) { 
    return $(item).data('id') 
}); 

finalString = id_array.join(';'); 
+0

非常感謝!這正是我所期待的。 – 2012-01-28 22:24:10