我正在使用这个脚本:
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 。 现在我有一个带有日期列的表格。我想只显示当前月份的日期。因此不再需要用户输入。 我尝试将输入替换为当前月份,但没有成功。 :-/有人有建议吗?
最佳答案
如果这是在客户端上完成的,则意味着您发送的数据超出了所需的数据,并且您相信客户端时间设置是准确的。因此,最好在服务器上执行此操作,这样您就不会获得超出所需的数据,不会向客户端发送冗余数据,并且不依赖于客户端时间设置或脚本。
无论如何,假设您的日期格式为 dd/mm/yyyy,则可以使用以下方法获取所需格式的当前月份:
var m = new Date().getMonth() + 1;
var monthString = '/' + ('0' + m).slice(-2) + '/';
现在隐藏行时使用:
row.style.display = text.indexOf(monthString) === -1 ? 'none' : '';
当然,您可以将monthString修改为任何适合的内容。
我更喜欢通过将 display 设置为 '' (空字符串)来撤消隐藏内容,这样它们就会采用默认或继承的样式,无论是什么,我都不必这样做知道它是什么。
我还建议您仅定位包含日期的单元格,以防该行的 textContent 将其他一些字符串连接成误报,因此:
var text = row.cells[i].textContent.toLowerCase()
其中i是包含日期的单元格的索引。
关于javascript - 如何编辑此表过滤器脚本以通过预定义的搜索字符串获取结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42156597/