【问题标题】:jQuery filtering by postjQuery通过帖子过滤
【发布时间】:2011-10-07 20:15:01
【问题描述】:

我有一个显示自定义帖子的存档页面,每个帖子都有一个div,在 div 中显示帖子的分类术语(自定义类别“jobtype”),如下所示:

<div class="hidden tags category1 category2 cat3 etc..."></div>

然后我有一个带有复选框的表单,每个复选框的值对应于帖子可能具有的一些可能类别:

<input class="filterbox" type="checkbox" name="interest" value="academia" />Academia<br />
<input class="filterbox" type="checkbox" name="interest" value="adminassistant" />Admin/Assistant<br />
<input class="filterbox" type="checkbox" name="interest" value="communicationsmarketing" />Communications/Marketing<br />
<input class="filterbox" type="checkbox" name="interest" value="development" />Development<br />

我想使用 jQuery 根据选中的复选框过滤(阅读:$('.postclass').hide();)当前帖子。目前我正在使用以下 jQuery 代码:

var $checkboxes;

function storecat() {         
    var tags = $checkboxes.map(function() {
        if(this.checked) return this.value;
    }).get().join(' ');
    $('#selected-interests').html(tags); 
}

$(function() {
    $checkboxes = $('.filterbox:checkbox').change(storecat);
});

$('#filtersubmit').click(){

}

这是一个关于分类页面上帖子条目的愚蠢示例:

<div class="post_entry">
    <div class="post-thumb"></div>
    <h4 class="post-title"><a href="#" title="Title">Title</a></h4>
<div class="post-meta">
    <p class="post_meta_organization">Job Organization</p>
        <p class="post_meta_location">City, State</p>
        <p class="post_meta_url">Website: <a href="#">Click Here</a></p>
    </div>
    <div class="hidden tags early-career internship other web-developmentit"></div>
    <p class="post_excerpt">Post Content Here</p>
</div>

我想我需要做一个$('.post_entry').each(); 来检查var tags,但我完全不确定从哪里开始。我想我需要的是创建一个标签数组(现在他们正在创建一个列表?),并在 &lt;div class="hidden tags..."&gt;&lt;/div&gt;

中创建一个类数组

我希望它隐藏没有任何相关标签的帖子,但只显示选择了所有标签的帖子。如果有人可以帮助我的.each() 功能,我们将不胜感激。

如果您想查看更多布局,请转到http://www.cirkut.net/wp/libertyguide/jobs

如果需要更多信息,请询问。

子问题:

如果未选择任何输入,如何显示所有帖子?我没有将此作为新问题发布,因为我发现这与此问题高度相关。

如果我有提交按钮&lt;input id="filter_submit" value="FIND" /&gt;

我将 jQuery 更改为

$('#filter_submit').click( function() {
    $('.tags').parent().hide();
    $('input:checked').each( function(i) {
    $('div.' + $(this).val()).parent().show();
});

当我点击提交按钮时,所有帖子都隐藏了。有什么帮助吗?

【问题讨论】:

  • 嗨乔希,只是为了让我更好地理解子问题,在jsfiddle.net/3qwty/3,当页面加载时,所有帖子都会显示。当您选择输入,然后全部取消选择时,所有帖子都会再次显示。使它适用于子问题应该有什么不同?
  • 我用更多信息更新了我的子问题。我将您的小提琴更改为jsfiddle.net/3qwty/6,因为我只想显示具有选定值的帖子。现在,当第一次运行后所有内容都未选中时,它们都消失了。
  • 嗨,乔希,我在下面编辑了我的答案,以便在未选择任何输入时显示所有帖子。

标签: jquery filter filtering taxonomy


【解决方案1】:

这就是你要找的东西吗:http://jsfiddle.net/3qwty/1/

$('input').click( function() {
    $('.tags').hide();
    $('input:checked').each( function() {
        $('div.' + $(this).val()).show();
    });
});

目前设置为仅显示选中的项目,但您可以翻转它以隐藏选中的项目(即http://jsfiddle.net/3qwty/2/)。

编辑:

看起来你可能隐藏了post-meta 的容器 div,在这种情况下你可以这样做: http://jsfiddle.net/3qwty/3/,隐藏父容器

$('input').click( function() {
    $('.tags').parent().show();
    $('input:checked').each( function() {
        $('div.' + $(this).val()).parent().hide();
    });
});

子问题编辑:

修改为在清除所有复选框后“重新显示”所有帖子: http://jsfiddle.net/3qwty/8/

$('input').click( function() {
    $('.tags').parent().hide();
    $('input:checked').each( function() {
        $('div.' + $(this).val()).parent().show();
    });
    if (!$('input:checked').length) $('.tags').parent().show();
});

【讨论】:

  • @Josh Allen - 如果这些解决方案中的任何一个对您有用,那么如果您接受答案将会很有用。这样,人们就知道是否有适合您的解决方案。
  • 您先生,是我的英雄。自上周一以来,我一直在从事这项工作,但我一生都无法找到一种方法,甚至无法寻找一种方法来实现这一目标。第一个解决方案是我需要的,但将.parent() 添加到显示和隐藏行中。我不能开始感谢你!
  • 嘿,没问题。我也去过那里。很高兴它对你有用。
  • 嗨,我编辑了我的问题以添加一个小子问题,但没有提交新问题,因为我发现它与当前问题高度相关(大多数偶然发现此问题的人可能会喜欢知道)。
【解决方案2】:

隐藏所有具有“post_entry”类的帖子的可能解决方案,然后仅显示具有所有选定类别的帖子:

$(".post_entry").hide().filter(".category1.category2.categoryN").show();

jquery filter() 列出了没有空格的类,给出了所选项目的交集;如果你想要联合(至少有一个类别的项目),请使用带有".category1, .category2, .categoryN"的过滤器

【讨论】:

  • 我认为如果我将它与@g_thom 的答案结合起来,这将起作用。我基本上是在想一种方法来使用这些类来根据一个孩子div 的类来过滤掉帖子。我认为filter 可能是一种更有效的方式,但@g_thom 根据我的需要提供了更完整的解决方案。感谢您的信息!
猜你喜欢
  • 1970-01-01
  • 2012-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多