简体   繁体   English

分页和过滤器如何正常工作?

[英]How do paging and filter work well?

I have a table with paging and filter . 我有一个带有分页和过滤器的表。 I set the limit to 5 and it work's well when the page is loaded, but when I use a filter to fetch the data, its shows me more than 5 rows. 我将限制设置为5,并且在加载页面时效果很好,但是当我使用过滤器获取数据时,它显示的行数超过了5行。 I hope it can keep limit 5 and paging. 我希望它可以保持限制5和分页。

@foreach($products as $item)
    <tr name='items'>
        <td><a href="#" name='type' data-pk='{{$item->id}}'>{{$item->type_id}}</a></td>
        <td><input class = 'imgInp btn btn-default' type="file" name="icon" data-input="false">
            <img />
            <button class='btn btn-primary' style='display:none'>upload</button>
            <button class='btn btn-danger' style='display:none'>cancel</button>
        </td>
        <td><a href="#" name='name' data-pk='{{$item->id}}' class="editable">{{$item->name}}</a></td>
        <td><a href="#" name='pricing' data-pk='{{$item->id}}' class="editable">{{$item->pricing}}</a></td>
        <td><a href="#" name='short_description' data-pk='{{$item->id}}' class="editable">{{$item->short_description}}</a></td>
        <td><a href='#' class="fa fa-trash fa-lg" aria-hidden="true" data-pk='{{$item->id}}' name='delete'></a></td>
    </tr>
@endforeach

here is my code 这是我的代码

  $('#search').keyup(function(){ var input, filter, table, tr, td, i; input = document.getElementById("search"); filter = input.value.toUpperCase(); table = document.getElementById("product_table"); tr = $("tr[name=items]"); for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[0]; td_1 = tr[i].getElementsByTagName("td")[1]; td_2 = tr[i].getElementsByTagName("td")[2]; td_3 = tr[i].getElementsByTagName("td")[3]; td_4 = tr[i].getElementsByTagName("td")[4]; if (td || td_1 || td_2 || td_3 || td_4) { if (td.innerHTML.toUpperCase().indexOf(filter) > -1 || td_1.innerHTML.toUpperCase().indexOf(filter) > -1 || td_2.innerHTML.toUpperCase().indexOf(filter) > -1 || td_3.innerHTML.toUpperCase().indexOf(filter) > -1 || td_4.innerHTML.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } }); 
  .thumb { height: 100px; border: 1px solid #000; margin: 10px 5px 0 0; } .paging-nav { text-align: right; padding-top: 2px; } .paging-nav a { margin: auto 1px; text-decoration: none; display: inline-block; padding: 1px 7px; background: #91b9e6; color: white; border-radius: 3px; } .paging-nav .selected-page { background: #187ed5; font-weight: bold; } #search_product{ float: right; padding-bottom: 10px; } 
 <link href="http://code.jquery.com/ui/1.12.1/themes/smoothness/jquery-ui.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" rel="stylesheet"/> <link href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" rel="stylesheet"/> <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script> <div class="tab-pane fade in active" id="update"> <br> <div id="search_product" class="input-group input-wrapper" align="right"> <span class="input-group-addon">search</span> <input type="text" id="search" class="form-control" placeholder=" "> </div> <table id="product_table" class="table"> <tbody><tr style="display: table-row;"> <td>type</td> <td>icon</td> <td>name</td> <td>pricing</td> <td>note</td> <td>delete</td> </tr> <tr name="items" style="display: table-row;"> <td><a href="#" name="type" data-pk="48">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="48" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="48" class="editable editable-click">10</a></td> <td><a href="#" name="short_description" data-pk="48" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="48" name="delete"></a></td> </tr> <tr name="items" style="display: table-row;"> <td><a href="#" name="type" data-pk="49">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="49" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="49" class="editable editable-click">10</a></td> <td><a href="#" name="short_description" data-pk="49" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="49" name="delete"></a></td> </tr> <tr name="items" style="display: table-row;"> <td><a href="#" name="type" data-pk="50">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="50" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="50" class="editable editable-click">10</a></td> <td><a href="#" name="short_description" data-pk="50" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="50" name="delete"></a></td> </tr> <tr name="items" style="display: table-row;"> <td><a href="#" name="type" data-pk="51">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="51" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="51" class="editable editable-click">10</a></td> <td><a href="#" name="short_description" data-pk="51" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="51" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="52">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="52" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="52" class="editable editable-click">10</a></td> <td><a href="#" name="short_description" data-pk="52" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="52" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="53">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="53" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="53" class="editable editable-click">20</a></td> <td><a href="#" name="short_description" data-pk="53" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="53" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="54">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="54" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="54" class="editable editable-click">20</a></td> <td><a href="#" name="short_description" data-pk="54" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="54" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="55">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="55" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="55" class="editable editable-click">20</a></td> <td><a href="#" name="short_description" data-pk="55" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="55" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="56">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="56" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="56" class="editable editable-click">20</a></td> <td><a href="#" name="short_description" data-pk="56" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="56" name="delete"></a></td> </tr> <tr name="items" style="display: none;"> <td><a href="#" name="type" data-pk="57">0</a></td> <td><input class="imgInp btn btn-default" type="file" name="icon" data-input="false"> <img> <button class="btn btn-primary" style="display:none">upload</button> <button class="btn btn-danger" style="display:none">cancel</button> </td> <td><a href="#" name="name" data-pk="57" class="editable editable-click">name</a></td> <td><a href="#" name="pricing" data-pk="57" class="editable editable-click">20</a></td> <td><a href="#" name="short_description" data-pk="57" class="editable editable-click">note</a></td> <td><a href="#" class="fa fa-trash fa-lg" aria-hidden="true" data-pk="57" name="delete"></a></td> </tr> </tbody></table><div class="paging-nav"><a href="#" data-direction="-1">&lt;&lt;</a><a href="#" data-page="0">1</a><a href="#" data-page="1">2</a><a href="#" data-page="2">3</a><a href="#" data-direction="1">&gt;&gt;</a></div> </div> 

Fiddle 小提琴

Simply add a counter: 只需添加一个计数器:

$('#search').keyup(function(){
  var input, filter, table, tr, td, i, count = 0;
  input = document.getElementById("search");
  filter = input.value.toUpperCase();
  table = document.getElementById("product_table");
  tr = $("tr[name=items]");
  for (i = 0; i < tr.length && count < 5; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    td_1 = tr[i].getElementsByTagName("td")[1];
    td_2 = tr[i].getElementsByTagName("td")[2];
    td_3 = tr[i].getElementsByTagName("td")[3];
    td_4 = tr[i].getElementsByTagName("td")[4];
    if (td || td_1 || td_2 || td_3 || td_4) {
      if (td.innerHTML.toUpperCase().indexOf(filter) > -1 ||
          td_1.innerHTML.toUpperCase().indexOf(filter) > -1 ||
          td_2.innerHTML.toUpperCase().indexOf(filter) > -1 ||
          td_3.innerHTML.toUpperCase().indexOf(filter) > -1 ||
          td_4.innerHTML.toUpperCase().indexOf(filter) > -1) {
        count++;
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }       
  }
  });

Also, you may want to get rid of all of your magic numbers and use jQuery a little more effectively. 另外,您可能希望摆脱所有魔术数字,并更有效地使用jQuery。 If I were to rewrite your code, I'd do it as follows: 如果要重写您的代码,请按照以下步骤操作:

$('#search').keyup(function () {
  const maxNums = 5;
  var filter = $(this).val().toUpperCase(),
      count  = 0;    

  $('tr[name="items"]').each(function () {
    if (count >= maxNums) return;

    var possible = true;
    $('td', this).each(function () {
      if ($(this).html().toUpperCase().indexOf(filter) < 0) {
        possible = false;        
      }
    })

    if (possible) {
      if (count++ < maxNums) {
        $(this).css('display', 'block');
      }
    } else {
      $(this).css('display', 'none');
    }
  });
});

I'm sure there are many on this site who could perform this even better than I. :) 我敢肯定,这个网站上有很多人可以比我做得更好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 AngularJS筛选器无法正常工作 - AngularJS Filter does not work well 如何在MithrilJS中进行分页? - How to do paging in MithrilJS? 如何在ExtJS 5中使用分页过滤网格数据 - How to filter grid data with paging in ExtJS 5 如何使用数组中的值过滤javascript中的嵌套数组以使其也适用于单个值? - How to filter nested array in javascript with values from array to make it work with single values as well? 数组过滤功能如何在javascript中工作? - How do array filter function work in javascript? 如何在facebook javascript API中进行分页? - How does paging in facebook javascript API work? `space` 分页在浏览器中是如何工作的? - How does `space` paging work in browsers? mongoose.js:如何在使用填充时从引用的子数组中删除属性,并将子数组字段之一用作过滤器? - mongoose.js: How do I remove a property from a subarray of references while using populate and use one of the subarray field as a filter as well? 电子邮件过滤器的.test在jquery 1.4.4上而不是在jquery 1.8.3上运行良好 - .test for email filter work well on jquery 1.4.4 instead of on jquery 1.8.3 doesn't work Gridview文本框过滤器-分页不起作用 - Gridview textbox filter - Paging NOT working
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM