2012-02-23 101 views
0

我有幾個圖像,我需要能夠按標題對它們進行分組和選擇,並且還可以單獨操作它們。從圖像組中填充一個二維數組

我的圖片是這樣的:

<img src="1.jpg" title="cat"> 
<img src="2.jpg" title="cat"> 
<img src="3.jpg" title="cat"> 
<img src="1.jpg" title="dog"> 
<img src="2.jpg" title="dog"> 
<img src="3.jpg" title="dog"> 
<img src="1.jpg" title="horse"> 
<img src="2.jpg" title="horse"> 
<img src="3.jpg" title="horse"> 

...等等。

我試圖創建一個數組,看起來像這樣:

imgArray = [cat[1,2,3], dog[1,2,3], horse[1,2,3]]; 

...,其中第一陣列級別組(標題),每個組內的實際元素的數組與匹配的標題。我需要能夠做這樣的事情:

var imgGroup = imgArray[cat]; 
doThings(imgGroup) 
function doThings(target){ 
    var pri = target[0], sec = target[1], ter = target[2]; 
    pri.doThis(); sec.doThat(); ter.doTheotherthing(); 
}); 

到目前爲止,我這樣做:

img.each(function(){ 
    var self = $(this), title = self.attr('title'); 
    imgArray.push([title, self]) 
    imgArray = $.unique(imgArray) //remove duplicate titles 
}); 

但是,這顯然不是一個理由,讓我看起來愚蠢的工作,大概是:/

有人能夠幫助我這個邏輯嗎?

+0

等待,你在做什麼?創建數組或對現有數組做些什麼? – Joseph 2012-02-23 03:24:13

回答

1

我懷疑你真正需要的結構是一個對象(不是數組),您必須爲每種類型的動物的屬性,每個屬性的值是數字數組:

var imgObj = { 
    "cat" : [1, 2, 3], 
    "dog" : [1, 2, 3], 
    "horse" : [1, 2, 3] 
} 

然後你可以說:

imgObj["cat"]   // give the array [1,2,3] 
imgObj["horse"].length // gives 3 
imgObj["dog"][0]  // accesses the first value in the dog array 

除了你的代碼試圖創建和使用您的陣列的方式/對象似乎你想要的子陣列持有jQuery的對象本身可能包含個人DOM中,IMG元素?仍然需要一個對象,其中的屬性是數組。如jQuery的,儘管從現有的代碼,你似乎可以用它

你沒有標記您的問題,所以這裏的如何,你可以從你的標記創建上述struture:

var imgObj = {}; 
$("img").each(function() { 
    var title = this.title; 
    if (!imgObj.hasOwnProperty(title)) 
     imgObj[title] = []; 

    imgObj[title].push($(this)); 
}); 

然後,您應該能夠調用現有的doThings()功能如下:

doThings(imgObj["cat"]); // passes just the cat array 
+0

答案的第二部分正是我需要的。我甚至沒有想過要使用一個對象,但我可以看到這是如何簡化事物並使其更易於引用。謝謝! – user1020408 2012-02-23 04:43:50

0

爲什麼不使用類名稱而不是頭銜?然後,您可以使用getELementsdByClassName或通過類篩選圖像的查詢來處理組中的所有「馬」元素。使用標題的獨特信息...