【问题标题】:Trying to use jQuery filter() with an array尝试将 jQuery filter() 与数组一起使用
【发布时间】:2013-12-31 02:06:43
【问题描述】:

我有一组复选框,单击这些复选框可将属性添加到数组。问题是我想过滤具有我刚刚添加到该数组的特定属性的链接。

所以我有一个可以包含 ["filter-F_0", "filter-F_1"] 等的数组...现在下面的代码仅在仅单击一个复选框时才有效,因此我的数组将是 ["filter-F_0 ],但是一旦有更多,我就迷路了。我应该在循环中这样做吗?

var arr = filterArray.join(",")

$(".appLink").filter("[" + arr + "]").css({
                        borderColor : 'red',
                        borderWidth : '1px',
                        borderStyle : 'solid'
                    });

我在下面设置了一个简单的示例,希望能帮助解释我正在尝试做的事情

http://jsfiddle.net/QCeXV/21/

【问题讨论】:

  • 因为选择器[filter-F_0,filter-F_0] 无效
  • 你也可以使用类,比如this example

标签: javascript jquery arrays filter


【解决方案1】:

看起来您正在寻找基于或条件的过滤器。现在您正在创建一个无效的过滤条件,如[filter-F_0,filter-F_0],而您可能需要[filter-F_0], [filter-F_0]。所以试试

var arr = $.map(filterArray, function (val) {
    return '[' + val + ']'
}).join(",")

【讨论】:

  • 过滤器有“:not”版本吗? '$(".appLink").filter(":not"+arr).css()'
  • @Bardsworth 你可以使用 .not() 而不是 .filter() 像$(".appLink").not(arr)
【解决方案2】:

我建议改用这个:http://blog.stevensanderson.com/2013/12/03/knockout-projections-a-plugin-for-efficient-observable-array-transformations/

它可以让你过滤一个 observable,当你改变你的选择时,它会更新视图。这可能比自己手动处理更好。

但为了澄清,您使用这样的过滤器:

return this.products().filter(function(product) {
    return product.isSelected();
});

其中 this.products() 是一个对象数组,您传入的函数从数组中获取一个项目(产品)并返回真/假,无论它是否包含在过滤器函数的输出中。您正在做的是在该函数内部循环以查看当前行的过滤器数组是否具有该值。

$.map() 的功能类似于另一个答案中提到的 filter() ...

【讨论】:

  • 我喜欢它的发展方向,在接下来的努力中,我可能会沿着这条道路前进。感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2018-06-08
  • 2016-03-25
  • 2013-12-25
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多