【问题标题】:jQuery: How can I loop over a set of elements finding only those matching the values within another array?jQuery:如何遍历一组元素,只找到与另一个数组中的值匹配的元素?
【发布时间】:2011-05-10 15:16:44
【问题描述】:

我基本上有一个名为 findItem() 的小函数,它应该根据元素上的自定义 data- 属性来查找我正在寻找的元素。

在这种情况下,这些是纯粹的数字,例如。 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])

这不起作用,因为 if 语句中的 count 似乎没有匹配任何内容。

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

我在这里做错了什么?

【问题讨论】:

    标签: javascript jquery arrays return


    【解决方案1】:

    使用jQuery.grepjQuery.inArray

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

    Working example

    【讨论】:

    • 嗯……我将其复制/粘贴到我的文件中,但注销findItem([1,3]) 的结果会返回第三次li 3 次,而不是第一次和第三次li 一次。知道我做错了什么吗?
    • @Jannis,试试我更新的答案,我也在 jsFiddle 上提供了一个示例。
    • 我检查了我们的小提琴,但只要你添加更多 lis 它就会中断,请在此处查看我更新的小提琴:jsfiddle.net/UVFBu/1
    • @Jannis,我想通了,看看我更新的答案和小提琴:jsfiddle.net/UVFBu/3
    【解决方案2】:

    要解决 if 语句中的 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])
    

    【讨论】:

    • 谢谢,但它仍然不匹配,因为 if 语句中的count 是整个数组,而不是再次匹配单个数字。所以 if 语句中的计数是 [1,3,4] 这不是 `== 1`,这是 if 语句所要求的。
    • 抱歉 Jannis,你一定是在我更新评论时写下了你的评论。下半场应该可以解决您的问题。
    • 是的,我确实做到了。我应用了您更新的解决方案,效果很好。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多