jQuery Isotope过滤器没有项目?

时间:2013-01-30 03:43:25

标签: javascript jquery jquery-isotope

我正在使用同位素过滤具有多个过滤器的列表,其中可能基于某些过滤器的组合,不会显示任何项目。在这种情况下,我想向用户显示一条消息,根据他们的过滤器参数,不存在任何结果。我该怎么做呢,同位素是否有内置的东西来处理这个问题?这是一个jsfiddle的例子。如果没有项目符合过滤器设置,则应显示...

http://jsfiddle.net/cssguru/e4vA3/

   $(function(){

   var $container = $('#container'),
      $checkboxes = $('#filters input');

   $container.isotope({
    itemSelector: '.item'
   });

   $checkboxes.change(function(){
    var filters = [];
    // get checked checkboxes values
    $checkboxes.filter(':checked').each(function(){
      filters.push( this.value );
    });
    // ['.red', '.blue'] -> '.red, .blue'
    filters = filters.join('');
    $container.isotope({ filter: filters });
   });

   });

4 个答案:

答案 0 :(得分:8)

您可以查看有多少同位素物品没有添加“同位素隐藏”类。当结果为0时,表示您的所有元素都将被隐藏,您可以触发某些事情发生。您可以使用回调函数,例如每次同位素过滤时运行reLayout。

function noResultsCheck() {
    var numItems = $('.item:not(.isotope-hidden)').length;
    if (numItems == 0) {
        //do something here, like turn on a div, or insert a msg with jQuery's .html() function
        alert("There are no results");
    }
}

将此添加到您的更改功能:

$container.isotope( 'reLayout', noResultsCheck );

http://jsfiddle.net/xvU8D/

答案 1 :(得分:4)

只是添加到nspace所说的内容......

你没有需要来添加'reLayout'回调,你可以在这里使用$container.isotope({ filter: filters });这样的代码中进行回调:

$container.isotope({ filter: filters }, function noResultsCheck() {
    var numItems = $('.item:not(.isotope-hidden)').length;
        if (numItems == 0) {
        alert("There are no results");
    }
});

http://jsfiddle.net/xvU8D/33/

这取自这里的文档: http://isotope.metafizzy.co/docs/introduction.html#script - 搜索“回调”页面。

答案 2 :(得分:0)

此外,要在同位素2中工作,你必须检查它是否可见/不可见而不是同位素隐藏类:

喜欢这个

var numItems = $('.item:visible').length;

答案 3 :(得分:0)

刚刚在同位素github问题页面找到了一个很好的解决方案。

Isotope v1:

$container.isotope({ filter: '.my-crazy.awesome.filter' });


if ( !$container.data('isotope').$filteredAtoms.length == 0) {
    // do stuff when no element was found
}

See Isotope Help - accessing the instance

Isotope v2

if ( !$container.data('isotope').filteredItems.length == 0) {
    // do stuff when no element was found
}

See Isotope - Filtered Items

see full post here