在 jQuery 选择器中混合逻辑 AND 和 OR
Mixing logical AND and OR in jQuery selector
我必须过滤包含两个关键数据属性的项目列表:
<li class="song" data-title="freedom" data-id="7" data-tags="tag-18-eot,tag-2-eot" data-category="1">Freedom</li>
- 类别
- 标签
按类别过滤应使用逻辑或,但按标签过滤应使用逻辑与。
使用这两者之一进行过滤不是问题。
我申请了,例如:
$(collection).filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]');
按标签过滤。或者:
$(collection).filter('[data-category="1"], [data-category="2"]);
按类别过滤。
这很好用。但是,我找不到将这两个选择器组合成一个可以传递给 filter()
函数的查询的方法,并且链接两个 filter()
调用不会产生预期的结果,因为第一个调用可能会过滤掉第二次调用留下的项目。
我发现 this question 有类似的主题,但问题和方法略有不同。
如何正确过滤这些项目?
只要您首先使用 AND
条件,您应该能够通过链接获得您想要的内容。例如:
var res = $('#collection li')
.filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]')
.filter('[data-category="1"], [data-category="2"]');
Fiddle here.
过滤器函数可以接收函数作为输入...
你可能会得到这样的结构:
var set = $(collection).filter(
function( index, element )
{
return ($(element).attr(...) == "...");
}
);
我必须过滤包含两个关键数据属性的项目列表:
<li class="song" data-title="freedom" data-id="7" data-tags="tag-18-eot,tag-2-eot" data-category="1">Freedom</li>
- 类别
- 标签
按类别过滤应使用逻辑或,但按标签过滤应使用逻辑与。
使用这两者之一进行过滤不是问题。
我申请了,例如:
$(collection).filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]');
按标签过滤。或者:
$(collection).filter('[data-category="1"], [data-category="2"]);
按类别过滤。
这很好用。但是,我找不到将这两个选择器组合成一个可以传递给 filter()
函数的查询的方法,并且链接两个 filter()
调用不会产生预期的结果,因为第一个调用可能会过滤掉第二次调用留下的项目。
我发现 this question 有类似的主题,但问题和方法略有不同。
如何正确过滤这些项目?
只要您首先使用 AND
条件,您应该能够通过链接获得您想要的内容。例如:
var res = $('#collection li')
.filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]')
.filter('[data-category="1"], [data-category="2"]');
Fiddle here.
过滤器函数可以接收函数作为输入...
你可能会得到这样的结构:
var set = $(collection).filter(
function( index, element )
{
return ($(element).attr(...) == "...");
}
);