【问题标题】:Inform the number of items filtered via list.js通知通过 list.js 过滤的项目数
【发布时间】:2021-07-07 20:17:33
【问题描述】:

我首先要说我不是开发人员,但我了解 JS 的最低限度......但是我无法解决一些在我看来似乎很简单(我认为是)的事情。

使用List.js 我能够配置过滤器来过滤guide-wcag.com/en/ 中的特定项目 我能够在没有找到任何内容时配置错误消息,我能够配置一些关键字和复选框也...

但我还想包括过滤项目的数量(应该出现一条消息,指示数量,因为这有助于那些没有看到内容并使用屏幕阅读器的人,例如),但我不能做吧。 . :(

带有项目数的消息应该出现在没有找到时出现消息的相同位置。

我将在这里留下我使用的 JS 的摘录(我再说一遍,我不是 JS 专家,对于任何错误的语法表示抱歉)。

谢谢

var options = {
    valueNames: [ 'ribbon', 'cards-title', 'cards-content', 'principio', 'recomendacao', 'niveis', 'keywords-cards', 'keywords-all' ]
  };

  var listaCards = new List('cards-filter', options);
  var activeFilters = [];
  var noItems = $('<li class="no-results text-center text-destaque-alert" role="alert">No criteria found. Filter again.</li>');

  $('.filter').change(function() {
    var isChecked = this.checked;
    var value = $(this).data("value");

    if(isChecked) {
      activeFilters.push(value);
    } else {
      activeFilters.splice(activeFilters.indexOf(value), 1);
    }

    listaCards.filter(function (item) {
      if(activeFilters.length > 0) {
      return(activeFilters.indexOf(item.values().niveis)) > -1;
    } return true; });

  });

  listaCards.on('updated', function(list) {
    if (list.matchingItems.length == 0) {
      $(list.list).append(noItems);
    } else {
      noItems.detach();
    }
  });

【问题讨论】:

    标签: javascript jquery filtering accessibility list.js


    【解决方案1】:

    使用basic examples,我从最后一个示例开始并修改了您的消息元素。

    var foundMessage = list => `Showing: ${list.matchingItems.length}/${list.size()}`;
    var notFoundMessage = 'No criteria found. Filter again.';
    
    var $message = $('<p>').addClass('message').attr('role', 'alert');
    
    var options = {
      valueNames: ['name', 'born'],
      item: '<li><h3 class="name"></h3><p class="born"></p></li>'
    };
    
    var values = [
      { name: 'Jonny Strömberg' , born: 1986 },
      { name: 'Jonas Arnklint'  , born: 1985 },
      { name: 'Martina Elm'     , born: 1986 }
    ];
    
    var userList = new List('cards-filter', options, values);
    
    userList.add({ name: 'Gustaf Lindqvist', born: 1983 });
    
    userList.on('updated', function(list) {
      if ($('.search').val().trim().length > 0) {
        if (list.matchingItems.length == 0) {
          $message.text(notFoundMessage);
        } else {
          $message.text(foundMessage(list));
        }
        $(list.list).prepend($message);
      }
    });
    .message { color: #555; font-style: italic; font-size: smaller; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.0.2/list.min.js"></script>
    <div id="cards-filter">
      <input class="search" placeholder="Search" />
      <button class="sort" data-sort="name">
        Sort
      </button>
      <ul class="list"></ul>
    </div>

    【讨论】:

    • 谢谢...这个例子我也测试过(我想所有的都展示了),但没有一个显示过滤的数量,只有过滤的项目......我需要显示类似这样的消息:“使用选定的过滤器,找到了 18 个项目”,你知道吗?
    • 嘿...我看到了你现在所做的... :) 我认为这就是我所需要的! :) 非常感谢!
    • @MarceloSales 我试图在列表之前预先添加元素,但我不能,我尝试修改它以仅在过滤时显示消息。如果文本为空,则消息根本不应该出现。我无法检查搜索文本,我将不得不阅读更多文档。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2018-06-25
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 2019-01-05
    相关资源
    最近更新 更多