Я составил таблицу, но использую <div>s вместо <tr>s и <td>s. вот пример:
<div class = "tbl tbl1">
<div class = "thead">
<div class = "tr">
<div class = "td colTitle" style = "width: 120px"><span>Title</span></div>
<div class = "td colLink" style = "width: 190px"><span>Link</span></div>
<div class = "td colSize numeric" style = "width: 75px"><span>Size(MB)</span></div>
<div class = "td colUploadDate" style = "width: 75px"><span>UploadDate</span></div>
<div class = "td colOpen" style = "width: 50px; max-width: 50px;"><span>Show</span></div>
</div>
<div class = "tr">
<div class = "td colTitle">
<input type = "text" class = "Filter" />
</div>
<div class = "td colLink">
<input type = "text" class = "Filter" />
</div>
<div class = "td colSize">
<input type = "text" class = "Filter" />
</div>
<div class = "td colUploadDate">
<input type = "text" class = "Filter" />
</div>
<div class = "td colOpen">
</div>
</div>
</div>
<div class = "tbody">
</div>
</div>
Я заполню tbody часть серверными операциями.
Я использую приведенные ниже коды для фильтрации своих строк на основе значений, введенных во входные данные фильтра.
$(".Filter").on('input', function () {
filterGrid();
$(".rowCount").val($(".tbody .tr:visible").length);
});
function filterGrid() {
$('.tbody .tr').each(function () {
var v = 1;
var x = $(this);
$(".thead .Filter[value!='']").each(function () {
var i = $(this).parent(".td").index();
if (x.children(".td:eq(" + i + ")").html().indexOf($(this).val()) != -1) {
v = v * 1;
} else {
v = 0;
return false;
}
});
if (v == 1) {
x.show();
} else {
x.hide();
}
});
}
Мой код работает нормально, когда у меня есть несколько строк, но когда количество загруженных строк увеличивается, для выполнения операции фильтрации требуется больше времени. Теперь у меня два вопроса:
1- можно ли оптимизировать мою функцию фильтра, чтобы она работала быстрее?
2- когда я ввожу первую букву я не могу ввести вторую букву до окончания фильтрации по первой букве. могу ли я применить javascript, чтобы прервать операцию и запустить новую, когда я нажимаю кнопку?
2) да, но если вы используете (1) выше, это, вероятно, не потребуется.
@mzedeler, не могли бы вы предоставить коды, пожалуйста?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


1) да. Переместите все данные в структуры дней JavaScript, выполните фильтрацию там, а затем синхронизируйте, чтобы DOM отражал результат с помощью jQuery.