2012-02-23 93 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或通过类筛选图像的查询来处理组中的所有“马”元素。使用标题的独特信息...