Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Curso de JS - Aula 08 - Filtragem da tabela utilizando forEach

Olá, na aula a busca é feita utilizando um for, tentei fazer utilizando forEach, mas não funciona. Poderia me explicar o motivo? Segue o código com forEach, as outras partes estão corretas, pois quando eu troco por um for a busca funciona perfeitamente.

var campoFiltro = document.querySelector("#filtrar-tabela");

campoFiltro.addEventListener("input", function(){
    var pacientes = document.querySelectorAll(".paciente");

    if(this.value.length > 0){
        pacientes.forEach(function(indice){
            var paciente = indice;
            var tdNome = paciente.querySelector(".info-nome");
            var nome = tdNome.textContent;
            var expressao = new RegExp(this.value, "i"); 

            if(!expressao.test(nome)){
                paciente.classList.add("invisivel");
            }else{
                paciente.classList.remove("invisivel");
                console.log("Igual!!");
            }
        });
    }else{
        pacientes.forEach(function(indice){
            indice.classList.remove("invisivel");
        });
    }
});
6 respostas

Oi Cristiano, vou ser sincero, não vi o erro em si no seu código... simplesmente não acontece nada ou dá algum erro no console do navegador?

Não acontece nada. No console também não aparece nenhum erro.

Oi Cristiano, realmente tem algum erro no seu código... não enxerguei de primeira.. pode colocar o código completo no github para que eu olhe ?

Certo, coloquei! É no arquivo filtro.js

https://github.com/crisgon/curso-alura-js-iniciante

solução!

Eu não sei explicar o motivo pois meu conhecimento teórico é limtado, mas o erro é devido ao this.value que esta retornando undefiend. se você trocar os locais onde está o this por campoFiltro.value acredito que vá funcionar (funcionou na minha máquina). mas o problema só ocorre dentro da função forEach, antes dela o this.value ainda captura o valor correto do input. Então só precisaria trocar na RegEX .var expressao = new RegExp(campoFiltro.value, "i");

Aaaaaaaah cara! Resolveu!! Muito obrigado!! Acredito que não tenha funcionado porque o this deve tá sendo processado como da função anônima do forEach.