Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Фильтр данных в таблице при заданном условии (https://javascript.ru/forum/jquery/73245-filtr-dannykh-v-tablice-pri-zadannom-uslovii.html)

denis_kontarev 01.04.2018 08:57

Фильтр данных в таблице при заданном условии
 
Вложений: 1
Здравствуйте, прошу помочь реализовать идею живой фильтрации данных. Есть таблица с числовыми данными, необходимо отображать только те tr, которые больше числа, которое мы указали в окошке input. Прошу помочь написать код, спасибо.
Есть код поиска в таблице именно по символам, а как сделать, чтоб он искал только числа при заданном диапазоне к примеру >30
$(document).ready(function(){
$("#search").keyup(function(){
_this = this;
$.each($("#filter tbody tr"), function() {
if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)
$(this).hide();
else
$(this).show();                
});
});
});

рони 01.04.2018 09:24

Цитата:

Сообщение от denis_kontarev
те tr

может td?

denis_kontarev 01.04.2018 09:33

сразу исключаем всю строку tr, если условия не подходят

рони 01.04.2018 10:07

denis_kontarev,
сделайте минимальный html.

denis_kontarev 01.04.2018 10:11

<div class="form-group">
<input type="text" class="form-control pull-right" id="search" placeholder="Поиск по таблице">
</div>

<table class="simple" id="filter">

<tr>
<td>33%</td>
<td>30%</td>
<td>41%</td>
</tr>

<tr>
<td>56%</td>
<td>20%</td>
<td>40%</td>
</tr>

<tr>
<td>80%</td>
<td>13%</td>
<td>56%</td>
</tr>

</table>


К примеру пишем в поисковой форме число 50 и он показывает только tr с числами больше 50

рони 01.04.2018 10:26

фильтрация строк таблицы
 
denis_kontarev,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
  $("#search").on("input", function() {
    var val = +this.value.trim();
    $.each($("#filter tbody tr"), function(i, tr) {
      var td = [].filter.call(tr.querySelectorAll("td"), function(td) {
        var num = +td.textContent.replace(/\D/g, "");
        return isNaN(val) || !isNaN(num) && val < num;
      });
      $(this).toggle(!!td.length);
    });
  });
});
  </script>
</head>

<body>
<div class="form-group">
<input type="text" class="form-control pull-right" id="search" placeholder="Поиск по таблице">
</div>

<table class="simple" id="filter">

<tr>
<td>33%</td>
<td>30%</td>
<td>41%</td>
</tr>

<tr>
<td>56%</td>
<td>20%</td>
<td>40%</td>
</tr>

<tr>
<td>80%</td>
<td>13%</td>
<td>56%</td>
</tr>

</table>

</body>
</html>

denis_kontarev 01.04.2018 10:35

Спасибо, но то ли я не могу додумать, то ли бог его знает, но ругается на
var num = +td.textContent.replace(/\D/g, "");

рони 01.04.2018 10:39

denis_kontarev,
значит у вас в ячейках не то что, что вы показали в макете.

denis_kontarev 01.04.2018 11:59

А можно ли поменять условие только в этой строке? чтоб скрипт воспринимал только числа
if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)

рони 01.04.2018 12:17

denis_kontarev,
постарайтесь разобраться в предложенном решении выше, буду удивлён если кто-то предложит алгоритм без цикла по ячейкам, либо вы что-то не договариваите, либо невнимательно скопировали.

denis_kontarev 01.04.2018 12:22

Представлю исходный код таблицы tr
<tr>

<td>00:15</td>

<td style="color:blue;text-align: left;">

<small style="color:black;">
<span>Футбол. Чемпионат Боливии. Лига LFPB</span>
</small>

<br>Ройял Пари - Сан-Хосе Оруро</td>

<td class="yes_volume_cf" style="color:green;font-weight: 600;">
<span style="color:black;">2.63</span>
<small style="color:green;">
<br>(3) 14% <img src="/images/up.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="" style="color:green;font-weight: 600;">
<span style="color:black;">3.3</span>
<small style="color:green;">
<br>(3.36) 2% <img src="/images/up.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="" style="color:green;font-weight: 600;">
<span style="color:black;">2.81</span>
<small style="color:red;">
<br>(2.44) 13% <img src="/images/down.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="">33%</td>
<td class="">30%</td>
<td class="yes">41%</td>

<td>0:2</td>
<td class="yes">12</td>
    
</tr>

Прошу прощения, я просто в java не силен

рони 01.04.2018 12:36

denis_kontarev,
и по каким ячейкам фильтровать??

denis_kontarev 01.04.2018 12:38

<td class="">33%</td>
<td class="">30%</td>
<td class="yes">41%</td>

Класс меняется, где значение больше там и yes

рони 01.04.2018 13:01

denis_kontarev,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  .yes{
    background-color: Blue;
    color:  White;
    font-size: 48px;
     padding: 2px 8px;
     border-radius: 4px;
  }

  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
$(function() {
  $("#search").on("input", function() {
    var val = this.value.trim();
    $.each($("#filter tbody tr"), function(i, tr) {
      var td = [].filter.call(tr.querySelectorAll("td:nth-child(n + 6):nth-child(-n + 8)"), function(td) {
        var num = td.textContent.match(/\d+(.\d+)?(?=\s*%)/);
        var ok = true;
        if(isNaN(val) || !val){
          $(td).removeClass("yes")
        }
        else {
            ok  =  num !== null && +val < +num[0];
            $(td).toggleClass("yes", ok)
        }
        return ok;
      });
      $(this).toggle(!!td.length);
    });
  });
});
  </script>
</head>

<body>
<div class="form-group">
<input type="text" class="form-control pull-right" id="search" placeholder="Поиск по таблице">
</div>

<table class="simple" id="filter">

<tr>

<td>00:15</td>

<td style="color:blue;text-align: left;">

<small style="color:black;">
<span>Футбол. Чемпионат Боливии. Лига LFPB</span>
</small>

<br>Ройял Пари - Сан-Хосе Оруро</td>

<td class="yes_volume_cf" style="color:green;font-weight: 600;">
<span style="color:black;">2.63</span>
<small style="color:green;">
<br>(3) 14% <img src="/images/up.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="" style="color:green;font-weight: 600;">
<span style="color:black;">3.3</span>
<small style="color:green;">
<br>(3.36) 2% <img src="/images/up.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="" style="color:green;font-weight: 600;">
<span style="color:black;">2.81</span>
<small style="color:red;">
<br>(2.44) 13% <img src="/images/down.png" width="9" height="11" align="center" alt="img"></small></td>

<td class="">33%</td>
<td class="">30%</td>
<td class="yes">41%</td>

<td>0:2</td>
<td class="yes">12</td>

</tr>


</table>

</body>
</html>

denis_kontarev 01.04.2018 13:07

огромное спасибо!!! супер работает!

рони 01.04.2018 13:36

denis_kontarev,
изменена фильтрация пост №14!!!


Часовой пояс GMT +3, время: 17:24.