在jQuery选择器中混合使用逻辑AND和OR

时间:2016-09-04 09:21:11

标签: javascript jquery dom jquery-selectors

我必须过滤包含两个关键数据属性的项目列表:

<li class="song" data-title="freedom" data-id="7" data-tags="tag-18-eot,tag-2-eot" data-category="1">Freedom</li>
  1. 分类
  2. 标签
  3. 按类别过滤应按逻辑OR进行,但按标记过滤应采用逻辑AND。

    使用这两个中的一个进行过滤不是问题。

    我申请了,例如:

    $(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有一个类似的主题,但问题有点不同,方法也是如此。

    如何正确过滤这些项目?

2 个答案:

答案 0 :(得分:6)

只要您首先使用AND条件,您就应该能够通过链接获得所需内容。例如:

var res = $('#collection li')
    .filter('li[data-tags*="tag-50-eot"][data-tags*="tag-51-eot"]')
    .filter('[data-category="1"], [data-category="2"]'); 

小提琴here

答案 1 :(得分:-2)

过滤功能可以接收输入功能......

你最终可能得到一个像

这样的结构
var set = $(collection).filter(
function( index, element )
{
    return ($(element).attr(...) == "...");
}
);