【问题标题】:Javascript: Multiple filters and multiple divsJavascript:多个过滤器和多个 div
【发布时间】:2017-10-29 18:18:25
【问题描述】:

我有一个容器内多个 div 的列表:

<div class='platform'>
    <div class='pldatawrcurrencies'>
        <div class='platform-data'>DKK, USD, CZK</div>
    </div>
    <div class='pldatawrissuesloanscountry'>
        <div class='platform-data'>UK, US, France</div>
    </div>
</div>
<div class='platform'>
    <div class='pldatawrcurrencies'>
        <div class='platform-data'>EUR, USD, PLN</div>
    </div>
    <div class='pldatawrissuesloanscountry'>
        <div class='platform-data'>Germany, Denmark, France</div>
    </div>
</div>
<div class='platform'>
    <div class='pldatawrcurrencies'>
        <div class='platform-data'>SEK, GBP, PLN</div>
    </div>
    <div class='pldatawrissuesloanscountry'>
        <div class='platform-data'>Poland, UK, Spain</div>
    </div>
</div>

<div id="CLP">
    <div>Enter desired currency: 
        <input type='text' id='currencies' placeholder='Search Text'>
    </div>
    <div>Enter desired country: 
        <input type='text' id='countries' placeholder='Search Text'>
    </div>
</div>

我希望允许访问者根据货币和/或国家/地区过滤平台。但是我对 JS 很陌生,找不到合适的解决方案。

假设您要查找 pldatawrcurrencies = PLN 但仅在 pldatawrissuesloanscountry = 波兰的情况下,我在第一个搜索字段中输入“PLN”,在第二个字段中输入“波兰”。结果应该过滤掉不包含这些特定参数的所有内容。

以下是我在网上某处找到并进行了调整的解决方案。它仅根据货币进行过滤。我已经尝试找到一种使用两个过滤器的方法,但无济于事。

// Search function
var search = ('#currencies');
$(document).ready(function(){
    searchNow(search);
});

function searchNow(searchKey) {
 $(searchKey).keyup(function(){

  // Search text
  var text = $(this).val();

  // Hide all content class element
  $('.platform').hide();

  // Search and show
  $('.platform .pldatawrcurrencies:contains("'+text+'")').closest('.platform').show();

 });
}

$.expr[":"].contains = $.expr.createPseudo(function(arg) {
  return function( elem ) {
   return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
  };
});

【问题讨论】:

    标签: javascript jquery filter


    【解决方案1】:

    如果我理解正确,您已经非常接近它了!只需为每个“可搜索”字段添加一个类

    <div class='platform'>
        <div class='pldatawrcurrencies search-me'>
            <div class='platform-data'>DKK, USD, CZK</div>
        </div>
        <div class='pldatawrissuesloanscountry search-me'>
            <div class='platform-data'>UK, US, France</div>
        </div>
    </div>
    <div class='platform'>
        <div class='pldatawrcurrencies search-me'>
            <div class='platform-data'>EUR, USD, PLN</div>
        </div>
        <div class='pldatawrissuesloanscountry search-me'>
            <div class='platform-data'>Germany, Denmark, France</div>
        </div>
    </div>
    <div class='platform'>
        <div class='pldatawrcurrencies search-me'>
            <div class='platform-data'>SEK, GBP, PLN</div>
        </div>
        <div class='pldatawrissuesloanscountry search-me'>
            <div class='platform-data'>Poland, UK, Spain</div>
        </div>
    </div>
    

    还有脚本:

    // Search function
    var search = ('#currencies');
    $(document).ready(function(){
        searchNow(search);
    });
    
    function searchNow(searchKey) {
     $(searchKey).keyup(function(){
    
      // Search text
      var text = $(this).val();
    
      // Hide all content class element
      $('.platform').hide();
    
      // Search and show
      $('.platform .search-me:contains("'+text+'")').closest('.platform').show();
    
     });
    }
    
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
      return function( elem ) {
       return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
      };
    });
    

    这样,您可以添加更多可搜索或不可搜索的div。我希望这会有所帮助!

    【讨论】:

    • 对不起,我忘记添加包含搜索字段的 HMTL 的最后一部分。假设您要查找 pldatawrcurrencies = PLN 但仅在 pldatawrissuesloanscountry = 波兰的情况下,我在第一个搜索字段中输入“PLN”,在第二个字段中输入“波兰”。结果应该过滤掉不包含这些特定参数的所有内容。
    【解决方案2】:

    我会这样做:

    $('input').on('input', function () {
        var currency = $('#currencies').val().toLowerCase().replace(/,/g, ''); // exclude commas
        var country = $('#countries').val().toLowerCase().replace(/,/g, '');
        $('.platform').hide().filter(function () {                    
            return $('.pldatawrcurrencies', this).text().toLowerCase().indexOf(currency) > -1
                && $('.pldatawrissuesloanscountry', this).text().toLowerCase().indexOf(country) > -1
        }).show();
    }).trigger('input');
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div id="CLP">
        <div>Enter desired currency: 
            <input type='text' id='currencies' placeholder='Search Text'>
        </div>
        <div>Enter desired country: 
            <input type='text' id='countries' placeholder='Search Text'>
        </div>
    </div>
    
    <div class='platform'>
        <div class='pldatawrcurrencies'>
            <div class='platform-data'>DKK, USD, CZK</div>
        </div>
        <div class='pldatawrissuesloanscountry'>
            <div class='platform-data'>UK, US, France</div>
        </div>
    </div>
    <div class='platform'>
        <div class='pldatawrcurrencies'>
            <div class='platform-data'>EUR, USD, PLN</div>
        </div>
        <div class='pldatawrissuesloanscountry'>
            <div class='platform-data'>Germany, Denmark, France</div>
        </div>
    </div>
    <div class='platform'>
        <div class='pldatawrcurrencies'>
            <div class='platform-data'>SEK, GBP, PLN</div>
        </div>
        <div class='pldatawrissuesloanscountry'>
            <div class='platform-data'>Poland, UK, Spain</div>
        </div>
    </div>

    【讨论】:

    • 这正是我正在寻找的。谢谢你。一个问题,不过。它在我的网站上不起作用。我尝试创建一个仅包含此代码的空 HTML 文件,但在输入数据时没有过滤。
    • 啊哈。 JS 应该放在 HMTL 下面。现在它可以工作了,谢谢百万。这几天我一直在为此苦苦挣扎。
    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 2018-02-14
    • 2017-12-18
    相关资源
    最近更新 更多