我有一个搜索功能,可以非常愉快地搜索一个数据属性的列表div,下面是正在运行的代码。
$(".classToSearch").each(function(){
if ($(this).attr('data-attribute1').search(new RegExp(filter, "i")) < 0) {
$(this).animate({opacity:0.1},100);
} else {
$(this).animate({opacity:0.5},100);
}
});
我希望搜索功能能够搜索多个数据属性。我尝试了一系列不同的格式,但我无法让它发挥作用。以下是我认为应该是这样的。
$(this).attr('data-attribute1','data-attribute2','data-attribute3')
或
$(this).attr('data-attribute1'||'data-attribute2'||'data-attribute3')
但我想我会需要一种for循环。任何帮助,将不胜感激。
---------- EDIT -------------
我的解决方案 这允许搜索框搜索所有数据属性。
$(".classToSearch").each(function(){
if ($(this).attr('data-attribute1').search(new RegExp(filter, "i")) < 0 &&
$(this).attr('data-attribute2').search(new RegExp(filter, "i")) < 0 &&
$(this).attr('data-attribute3').search(new RegExp(filter, "i")) < 0 &&
) {
$(this).animate({opacity:0.1},100);
} else {
$(this).animate({opacity:0.5},100);
}
});
答案 0 :(得分:2)
您可以使用.data()
更轻松地访问这些属性,然后将它们收集到一个数组中,您可以从中执行每个属性的正则表达式测试:
var $this = $(this),
attribs = [$this.data('attribute1'), $this.data('attribute2'), $this.data('attribute3')],
re = new RegExp(filter, "i");
if (attribs.some(function() {
return this.match(re);
})) {
// some attributes matched the filter
} else {
// no attributes matched the filter
}
另请参阅:Array.some()
答案 1 :(得分:0)
你看过这个......
http://api.jquery.com/multiple-attribute-selector/
似乎是你的追求。
但也许更像......
if ($(this).has([attr1],[attr2])){
//do stuff
}
答案 2 :(得分:0)
如果您不提前知道属性名称,或者您不想知道它们,那么只需要在其中搜索值的任意属性集
$(".classToSearch").each(function() {
var _in = $(this).text();
$.each($(this).data(), function(k, v) {
if (v == find) {
// ...
}
});
});
在JSFiddle:http://jsfiddle.net/yJLzQ/1/