【问题标题】:jQuery - Simple filter system - how to select elements that do not have certain classes?jQuery - 简单的过滤系统 - 如何选择没有特定类的元素?
【发布时间】:2011-10-12 21:30:10
【问题描述】:

我正在尝试构建一个简单的 jQuery 过滤器系统来显示和隐藏各种类别的元素。

问题是某些元素属于多个类别,即使其中一个过滤器被关闭,也应该保持可见。

我能想到的最合乎逻辑的解决方案是,在切换过滤器项目后,查看哪些类别仍设置为可见,并隐藏不可见的元素。

因此,我的问题在于试图弄清楚如何选择没有任何给定类的元素。

我正在尝试查找选中的类别(每个过滤器项都有一个 id:filter-category_name):

$('.filter-checked').each(function(){
    checkedCategories = checkedCategories + ('.' + $(this).attr('id').replace('filter','category'));
});

然后淡出没有不再检查的item的class的元素:

$(filterCategory).filter(function(){
return $(not(checkedCategories));
}).fadeTo(500,0.1);

地点:

var filterCategory = '.'+$(this).attr('id').replace('filter','category');

(即被点击的过滤项)

我认为主要问题在于试图专门找到没有任何类别的项目仍在检查的项目,但除了用我当前的解决方案解决问题之外,如果有明显的和更多的解决这个问题的优雅方法真是太棒了。

谢谢!!

【问题讨论】:

    标签: jquery filter traversal


    【解决方案1】:

    我相信您正在寻找的是 not 方法: http://api.jquery.com/not/

    您将为它提供一个选择器,其中包含要从原始选择中排除的类。

    【讨论】:

    • 我已经在过滤器中使用了上面的not方法,我应该如何使用not方法来正确地做我需要的事情?
    • 好吧,我设法弄明白了,我用过滤器让事情变得过于复杂了。只需使用 not 并选择多个类,它就起作用了! $(filterCategory).not(checkedCategories).fadeTo(500,0.1);
    • 嗯,除了现在我遇到了一个问题,即 not 方法只能用作 AND(这有意义吗?) - 我只想选择 包含 checkedCategoriesany 但似乎传递 not 方法多个类只返回不包含 all 的 checkCategories 的元素。 .. 有什么想法吗?
    • OK - 问题出在选择器中需要逗号,因此 not 方法按需要使用逗号分隔参数中的类。
    • 对不起,我没有注意这个!很高兴你明白了。
    【解决方案2】:

    你可以像这样检查项目是否有特定的类

    假设类名是 'foo' 而元素 id 是 'something'

    if($('#something').hasClass('foo')){
       //if this element has class foo
    }
    else{
       //if this element dont have class foo
    }
    

    在这里查看http://jsfiddle.net/uhSKm/

    【讨论】:

    • 嗨,我查看了 hasClass,但看不到如何将它应用到我需要查找多个元素并查看它是否包含 多个类,然后对这些项目执行操作?
    猜你喜欢
    • 1970-01-01
    • 2011-11-16
    • 2011-11-07
    • 1970-01-01
    • 2011-02-07
    • 2011-08-08
    • 2015-04-22
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多