2017-02-10 14 views
1

Я использую этот скрипт:Как отредактировать сценарий фильтра таблицы, чтобы получить результаты по заранее определенной строке поиска?

var LightTableFilter = (function(Arr) { 

    var _input; 

    function _onInputEvent(e) { 
     _input = e.target; 
     var tables = document.getElementsByClassName(_input.getAttribute('data-table')); 
     Arr.forEach.call(tables, function(table) { 
      Arr.forEach.call(table.tBodies, function(tbody) { 
       Arr.forEach.call(tbody.rows, _filter); 
      }); 
     }); 
    } 

    function _filter(row) { 
     var text = row.textContent.toLowerCase(), val = _input.value.toLowerCase(); 
     row.style.display = text.indexOf(val) === -1 ? 'none' : 'table-row'; 
    } 

    return { 
     init: function() { 
      var inputs = document.getElementsByClassName('light-table-filter'); 
      Arr.forEach.call(inputs, function(input) { 
       input.oninput = _onInputEvent; 
      }); 
     } 
    }; 
})(Array.prototype); 

document.addEventListener('readystatechange', function() { 
    if (document.readyState === 'complete') { 
     LightTableFilter.init(); 
    } 
}); 

})(document); 

и этот вход:

<input type="search" class="light-table-filter" data-table="order-table"> 

Когда я что-то типа в входе фильтра, он фильтрует таблицу, так что я вижу только те записи, у меня есть там соответствующие текст. Примерно так: http://codepen.io/chriscoyier/pen/tIuBL. Теперь у меня есть стол со столбцом даты. Я хотел бы отображать только даты текущего месяца. Поэтому больше не нужно вводить пользователя. Я попытался заменить вход с текущим месяцем без успеха. : -/У кого-то есть предложение?

+0

Я не вижу столбца даты в вашем кодефене. Укажите «Минимальный, полный и проверенный пример»: http://stackoverflow.com/help/mcve – Connum

+0

Каков формат строки даты в столбце? Вместо того, чтобы переключаться между '' none ':' table-row'' считать '' none ':' '', поэтому он может использоваться для любого типа элемента. – RobG

ответ

-1

Если это делается на клиенте, это означает, что вы отправляете больше данных, чем это необходимо, и вы доверяете правильной настройке времени клиента. Поэтому было бы лучше сделать это на сервере, чтобы вы не получали больше данных, чем вам нужно, не отправляйте избыточные данные клиенту и не зависите от настройки времени или сценариев клиента.

Во всяком случае, предполагая ваш формат даты дд/мм/гггг, то можете получить текущий месяц в требуемом формате с помощью:

var m = new Date().getMonth() + 1; 
var monthString = '/' + ('0' + m).slice(-2) + '/'; 

теперь, когда скрываются строки использования:

row.style.display = text.indexOf(monthString) === -1 ? 'none' : ''; 

Из Конечно, вы можете изменить monthString быть любым, что подходит.

Я предпочитаю отменять скрытие вещей с помощью отображения, установив их в '' (пустая строка), таким образом они принимают свой стиль по умолчанию или унаследованный, что бы это ни было, и мне не нужно знать, что это такое ,

Я также предлагаю вам таргетинг только на ячейку с датой в ней только в случае TextContent сцепляются Роу некоторых других строк в ложноположительный, так:

var text = row.cells[i].textContent.toLowerCase() 

где я является индекс ячейки с датой в ней.

 Смежные вопросы

  • Нет связанных вопросов^_^