douhui8163 2017-12-20 02:23
浏览 71
已采纳

数据表按外部按钮/链接过滤

I'm trying to filter the searching of my table using a treeview type of buttons/links beside my table. This is the design:

Prototype Here's the tricky part. So when I click the year, the table will filter by year. Then if I also clicked the category below the year it will filter with the year and so forth. I really don't have any idea customizing the API in datatables.

  • 写回答

1条回答 默认 最新

  • dongnaota6386 2017-12-20 02:53
    关注

    const data = [
      'a-T1-2016-01',
      'b-T1-2016-01',
      'c-T1-2016-02',
      'd-T1-2015-01',
      'e-T1-2015-01',
      'f-T1-2016-03',
    ]
    
    $('[data-filter]').click(function() {
      const filterStr = $(this).attr('data-filter')
      alert(data.filter((x) => x.includes(filterStr)).join(','))
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul>
      <li>
        <a data-filter="2015">2015</a>
        <ul>
          <li>
            <a data-filter="T1-2015">Type1</a>
            <ul>
              <li>
                <a data-filter="T1-2015-01">01</a>
              </li>
              <li>
                <a data-filter="T1-2015-02">02</a>
              </li>
              <li>
                <a data-filter="T1-2015-03">03</a>
              </li>
            </ul>
          </li>
        </ul>
      </li>
      <li>
        <a data-filter="2016">2016</a>
        <ul>
          <li>
            <a data-filter="T1-2016">Type1</a>
            <ul>
              <li>
                <a data-filter="T1-2016-01">01</a>
              </li>
              <li>
                <a data-filter="T1-2016-02">02</a>
              </li>
              <li>
                <a data-filter="T1-2016-03">03</a>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>

    or you may need filter multi-column, like <a data-filer="year=xx&month=xx"></a>

    or you may need filter from different controls

    const filters = {}
    
    $('[data-filter]').click(function() {
      const filterStr = $(this).attr('data-filter')
      filters[filterStr] = !filters[filterStr]
      alert(Object.keys(filters).filter((x) => filters[x]).join(','))
    })
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <a data-filter="2015">2015</a>
    <a data-filter="2016">2016</a>
    <a data-filter="2017">2017</a>

    or compose these up

    suggest use mvvm(react/angular/vue) for your next project, they deal ui automaticly, you can focus on data handling

    </div>
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化