jQuery:多选择器问题

时间:2011-07-08 14:53:43

标签: jquery

我在显示div时遇到问题,其中div有三个我需要匹配的选择器。这些是典型的:

<div class="pinfo draft sept-2010">...</div>
<div class="pinfo published feb-2011">...</div>
etc...

总是pinfo后面是审核状态(已发布或草稿),然后是时间范围(月份+年)

这就是我目前所拥有的:

// Hide all rows
$(".pinfo").hide();
// Now, show those rows where the selectors are in the filters built
for (idx in $cls)
{
    console.log('filter: '+$cls[idx]);
    $('.pinfo').filter($cls[idx]).show();
}

其中$ cls是一个字符串数组。字符串是类选择器,然后由用户从输入表单中进行选择。例如:

$cls = [".Draft .sept-2011", 
        ".Published .sept-2011"]

我在显示div时遇到问题,其中div有三个我需要匹配的选择器。

感谢任何帮助。

谢谢! 埃里克

2 个答案:

答案 0 :(得分:1)

  1. 不要在数组上使用for..in循环。仅在对象上使用它们,并且仅在hasOwnProperty上使用它们。你可以在这里使用jQuery的$.each循环遍历数组。
  2. 最大的问题。像".Draft .sept-2011"这样的选择器说“查找具有类sept-2011的元素,其具有类Draft的祖先元素。您可以组合多个类选择器:您想要的是.Draft.sept-2011
  3. 所以你的代码可能如下所示:

    $cls = [".Draft.sept-2011", 
            ".Published.sept-2011"]
    
    var $pinfo = $('.pinfo').hide();
    $.each($cls, function(idx, val) {
        $pinfo.filter(val).show();
    });
    

    请注意,为了提高性能,我还缓存了$('.pinfo')选择器调用。

答案 1 :(得分:0)

请改为尝试:

$('.pinfo').parent().find($cls[idx]).show();