【问题标题】:List.js finds the element but still keeps others tooList.js 找到元素但仍然保留其他元素
【发布时间】:2017-05-07 20:14:53
【问题描述】:

这是我第一次使用 List.js。我有以下结构:

var options = {
    valueNames: ['name']
};

var coursesList = new List('courses-list', options);

coursesList.on('updated', function(list) {
    console.info(list.matchingItems);
    if (list.matchingItems.length > 0) {
        $('.no-result').hide()
    } else {
        $('.no-result').show()
    }
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
<div id="courses-list">
 <input class="search">
  <div id="collectionView" class="list">
    <div class="row1">
     <div class="large-6 small-12 columns" >
      <a href="link/to/somewhere" target="_blank">
       <span class="name">Demokurs Französisch A2 Online</span>
       <p class="description">blabla</p>
     </a>
    </div>
    <div class="large-6 small-12 columns" >
     <a href="link/to/somewhere" target="_blank">
      <span class="name">Französisch</span>
      <p class="description">blabla</p>
     </a>
    </div>
   </div>
    <div class="row2">
     <div class="large-6 small-12 columns" >
      <a href="link/to/somewhere" target="_blank">
       <span class="name">Kurs A</span>
       <p class="description">blabla</p>
     </a>
    </div>
    <div class="large-6 small-12 columns" >
     <a href="link/to/somewhere" target="_blank">
      <span class="name">Kurs B<span>
      <p class="description">blabla</p>
     </a>
    </div>
   </div>
</div>
</div>

现在,如果我搜索术语A2,它会正确显示row1 中第一个div 的内容但 以及第二个div 及其所有内容。 List.js 根据需要隐藏row2。

如何让它同时隐藏所有其他 div?

我还检查了是否真的只有匹配:

coursesList.on('updated', function(list) {
    console.info(list.matchingItems);
    if (list.matchingItems.length > 0) {
        $('.no-result').hide()
    } else {
        $('.no-result').show()
    }
})

日志显示list.matchingItems 仅找到对象。

【问题讨论】:

    标签: javascript jquery html list list.js


    【解决方案1】:

    List.js 并非设计为以这种方式工作,它 doesn't support nested lists,它仅将列表项向下计数 1 级,因此它将整个 &lt;div class="row1"&gt; 视为单个列表项,&lt;div class="row2"&gt; 视为另一个。

    如果您希望它正常工作,我建议删除&lt;div class="row1"&gt; 和&lt;div class="row2"&gt;,以便所有相关的&lt;div&gt; 处于同一级别。如下图:

    var options = {
        valueNames: ['name']
    };
    
    var coursesList = new List('courses-list', options);
    
    coursesList.on('updated', function(list) {
        console.info(list.matchingItems);
        if (list.matchingItems.length > 0) {
            $('.no-result').hide()
        } else {
            $('.no-result').show()
        }
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/list.js/1.5.0/list.min.js"></script>
    <div id="courses-list">
      <input class="search">
      <div id="collectionView" class="list">
          <div class="large-6 small-12 columns">
            <a href="link/to/somewhere" target="_blank">
              <span class="name">Demokurs Französisch A2 Online</span>
              <p class="description">blabla</p>
            </a>
          </div>
          <div class="large-6 small-12 columns">
            <a href="link/to/somewhere" target="_blank">
              <span class="name">Französisch</span>
              <p class="description">blabla</p>
            </a>
          </div>
          <div class="large-6 small-12 columns">
            <a href="link/to/somewhere" target="_blank">
              <span class="name">Kurs A</span>
              <p class="description">blabla</p>
            </a>
          </div>
          <div class="large-6 small-12 columns">
            <a href="link/to/somewhere" target="_blank">
              <span class="name">Kurs B</span>
              <p class="description">blabla</p>
            </a>
          </div>
      </div>
    </div>

    如果你绝对需要嵌套列表,那么你应该使用 jQuery,in a similar way to this question 而不是使用 List.js。

    【讨论】:

    • 这个答案完全正确。因为 list.js 过滤器只影响 class="list" 的第一个 div 的子级。如果您删除 id="collectionView" 并将 div class="row1" 更改为 "row1 list",它会按照您的意愿工作,但这不适用于第二行 div(class="row2 list,不起作用)。
    • 谢谢!我使用了您的方法,但将其与多个 List.js 列表结合使用。它有助于对不同的行进行分类!
    猜你喜欢
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 2011-12-21
    • 2015-07-16
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多