2010-11-16 98 views
1

我基本上有一个名为findItem()的小函数,它应该根据元素上的自定义data-属性来查找我正在查找的元素。jQuery:如何遍历一组元素,找到与其他数组中的值匹配的元素?

在这种情况下,这些纯粹是数字例如。 data-slide=1

对于如何将每个项目的数据幻灯片的值与另一个数组中包含的值进行匹配,我有点无知。

这里有一个更具体的例子:

function findItem(count) { 
    var collection = []; 

    $.each(allMyLiItems, function(i, item) { 

     if ($(item).data('slide') == count) { 
      collection.push(item); 
     } 

    }); 

    return $(collection); 
} 
findItem([1,3]) 

不工作,因为count if语句似乎并不匹配任何内部。

页面确实包含4个<li data-slide="{number}">…元素,所以1,3应返回这些元素的第一个和第三个。

我在这里做错了什么?

回答

5

使用jQuery.grepjQuery.inArray

function findItem(items) { 
    return jQuery.grep($('li'), function(element, index) { 
     return jQuery.inArray($(element).data('slide'), items) != -1; 
    }); 
} 

Working example

+0

嗯...我复制/粘贴到我的文件中,但注销'findItem([1,3])'的结果'返回第三次'li'而不是第一次和第三次'li'每次一次。任何想法我做错了什么? – Jannis 2010-11-16 19:25:41

+0

@Jannis,试试我更新的答案,我也提供了一个关于jsFiddle的例子。 – 2010-11-16 19:51:30

+0

我检查了我们的小提琴,但只要你添加更多'li's它打破仍然,看到我更新的小提琴在这里:http://jsfiddle.net/UVFBu/1/ – Jannis 2010-11-16 20:10:03

1

以修正,如果statment不匹配任何内部count的问题,试试这个:

function findItem(count) { 
    var collection = [], 
      count = count; 

    $.each(allMyLiItems, function(i, item) { 

     if ($(item).data('slide') == count) { 
      collection.push(item); 
     } 

    }); 

    return $(collection); 
} 
findItem([1,3]) 

这将创建一个闭合所以each内部匿名函数就能看到它。

你的第二个问题是,你通过count作为一个数组。所以if条件需要一些固定:

function findItem(count) { 
    var collection = [], 
      count = count; 

    $.each(allMyLiItems, function(i, item) { 

     if (count.indexOf($(item).data('slide')) !== -1) { 
      collection.push(item); 
     } 

    }); 

    return $(collection); 
} 
findItem([1,3]) 
+0

谢谢,但它仍然不会因为'里面count'匹配if语句整个数组,而不是单个数字再次匹配。所以在if语句中计数的是[1,3,4],它不是'== 1',这是if语句要求的。 – Jannis 2010-11-16 05:31:49

+0

对不起Jannis,在我更新它时,你一定写了你的评论。下半年应该解决你的问题。 – 2010-11-16 05:33:00

+0

是的,我确实。我应用了您的更新解决方案,并且效果很好。非常感谢。 – Jannis 2010-11-16 19:27:46

相关问题