【问题标题】:Proper Nested Search using Javascript使用 Javascript 进行正确的嵌套搜索
【发布时间】:2016-09-26 10:41:58
【问题描述】:

我正在使用list.js 来搜索、排序和过滤我的菜单项。我在嵌套 <ul> 上使用搜索功能时遇到问题,无法避免。

问题是当我在子<ul> 元素中搜索文本时,它会返回子<ul> 中的整个<li>

我有什么遗漏吗?

JSFiddle:https://jsfiddle.net/7ukgqmsp/

这是一个示例代码;

  var options = {
      valueNames: ['demo-class']
  };
  var userList = new List('test', options);
<script src="https://cdnjs.cloudflare.com/ajax/libs/list.js/1.2.0/list.min.js"></script>
<div id="test">
  <input class="search" placeholder="Search" />
  <ul class="list">
    <li>
      <a class="demo-class" href="#" title="1">1</a>
    </li>
    <li>
      <a class="demo-class" href="#" title="2">2</a>
    </li>
    <ul class="list">
      <li>
        <a class="demo-class" href="#" title="3">3</a>
      </li>
      <li>
        <a class="demo-class" href="#" title="4">4</a>
      </li>
      <li>
        <a class="demo-class" href="#" title="5">5</a>
      </li>
      <li>
        <a class="demo-class" href="#" title="6">6</a>
      </li>
    </ul>
    <li>
      <a class="demo-class" href="#" title="7">7</a>
    </li>
  </ul>
</div>

【问题讨论】:

    标签: javascript html listjs


    【解决方案1】:

    不幸的是,list.js 目前似乎不支持搜索嵌套列表(请参阅the Github issue)。

    但是,您可以通过为嵌套列表提供另一个类、创建单独的 List.js 并递归搜索来创建自定义解决方案?

    【讨论】:

      【解决方案2】:

      看起来这种功能还没有实现,作者也没有任何添加它的计划。

      为什么不制作自己的原始 jQuery 解决方案?

      $('.search-box').on('keyup', function(){
      
      var searchTerm = $(this).val().toLowerCase();
      
          $('.list li').each(function(){
      
              if ($(this).filter('[data-search-term *= ' + searchTerm + ']').length > 0 || searchTerm.length < 1) {
                  $(this).show();
              } else {
                  $(this).hide();
              }
      
          }); });
      

      【讨论】:

      • 谢谢,因为我使用这个库没有任何问题,直到嵌套搜索我没有实现我自己的。现在我必须:-)
      • 有时制作自己的解决方案是可行的方法,我们在与第三方库合作时经常碰壁,因此有信心围绕它进行构建是一项巨大的资产。祝你好运!
      【解决方案3】:

      正如@Sam 和@David 所说,这是图书馆的问题。

      如果有人正在使用或想要使用这个具有嵌套功能的库,可以在项目的 GitHub 页面下找到它。

      Github - List.js with nested functionality

      一个示例用法;

      $(function() {
        var options = {
          valueNames: ['searchable'],
          item: '<li><a class="searchable" href="#"></a></li>',
          nestedSearch: true
        };
        var userList = new List('users', options);
      })
      <div class="service-list">
      <div id="users">
        <input class="search" placeholder="Search" />
        <dl class="accordion" data-accordion>
          <dd>
            <div id="panel1" class="content">
              <ul class="list first-level">
                <li>
                  <a href="#" class="searchable link-first-level">Card Services Summary</a>
                  <ul class="list">
                    <li>
                      <a class="searchable" href="#">Permanent Access Card</a>
                      <ul class="list last-level">
                        <li><a class="searchable" href="#">Apply for new</a></li>
                        <li><a class="searchable" href="#">Apply for replacement</a></li>
                        <li><a class="searchable" href="#">Cancel current</a></li>
                      </ul>
                    </li>
                    <li>
                      <a class="searchable" href="#">Permanent Identity Card</a>
                      <ul class="list last-level">
                        <li><a class="searchable" href="#">Apply for new</a></li>
                        <li><a class="searchable" href="#">Apply for replacement</a></li>
                        <li><a class="searchable" href="#">Cancel current</a></li>
                      </ul>
                    <li>
                      <a class="searchable" href="#">Temporary Access Card</a>
                      <ul class="list last-level">
                        <li><a class="searchable" href="#">Apply for new</a></li>
                        <li><a class="searchable" href="#">Apply for replacement</a></li>
                        <li><a class="searchable" href="#">Cancel current</a></li>
                      </ul>
                    <li>
                      <a class="searchable" href="#">Free Zone Card</a>
                      <ul class="list last-level">
                        <li><a class="searchable" href="#">Apply for new</a></li>
                        <li><a class="searchable" href="#">Apply for duplicate</a></li>
                        <li><a class="searchable" href="#">Apply for replacement</a></li>
                        <li><a class="searchable" href="#">Amend current</a></li>
                        <li><a class="searchable" href="#">Cancel current</a></li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
            </div>
          </dd>
        </dl>
      </div>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
      <script src="https://raw.githubusercontent.com/bilalfastian/list.js/feature/nested-search/dist/list.min.js"></script>

      【讨论】:

      • 这在现有的 HTML 上效果很好,如果 HTML 是动态的,你会怎么做。我尝试了很多组合,但似乎没有任何效果....
      猜你喜欢
      • 1970-01-01
      • 2020-04-18
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 2011-06-18
      • 1970-01-01
      • 2021-11-14
      相关资源
      最近更新 更多