If this table does not have too many records, I think Mario's idea is good. You can play everything in a json and write to html. If not, you can do an ajax while the guy types:
var $input = $('.search');
$input.on('keyup', function(e) {
// O que vai buscar
var needle = $.trim($suggestInput.val());
// Precisa ter ao menos 3 caracteres
if(needle.length < 3) {
if(needle.length > 0 || code == 27)
$suggestContainer.fadeOut('fast');
return false;
}
// Se foi o último buscado não busca de novo
if(needle == $input.attr('data-last')) {
// Aqui você mostra os resultados
return false;
}
// Mostra o loading...
// Se já tem alguma requisição em andamento, cancela ela
if(ajaxRequest && ajaxRequest.readyState != 4){
ajaxRequest.abort();
}
// Faz a busca
ajaxRequest = $.ajax({
url: '/search-trainings',
type: 'GET',
dataType: 'json',
data: {q: needle},
}).done(function(result) {
$input.attr('data-last', needle);
// Faz aqui o que você precisa
}).fail(function() {
// Se der erro na requisição
}).always(function() {
// Retira o loading
});
});