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

erro ao utilizar forEach no filtrar

Quando utilizei o forEach no exercício o "this.value" do RegExp está com o valor "undefined", porém quando retorno para o for "tradicional" funciona normalmente. Porém não consegui entender o porque.

Poderia por favor me ajudar?

Segue código abaixo:

var campoFiltro = document.querySelector("#filtrar-tabela");
campoFiltro.addEventListener("input", function(){

    var pacientes = document.querySelectorAll(".paciente");
    if(this.value.length > 0)
    {
      pacientes.forEach(function(paciente)
       //for (var i = 0; i < pacientes.length; i++)
      {
    //paciente= pacientes[i];
        var tdNome = paciente.querySelector(".info-nome");
        var nome = tdNome.textContent;
        var expressao = new RegExp(this.value, "i");

        if(expressao.test(nome))
        {
          paciente.classList.remove("invisivel");
        } else {
          paciente.classList.add("invisivel");
        }
      });
    } else {
       for (var i = 0; i < pacientes.length; i++)
      {
        var paciente = pacientes[i];
        paciente.classList.remove("invisivel");
      };
    }
});
2 respostas
solução!

Oi Ronye, o this tem um valor muito dinâmico. Ele muda de acordo com o contexto. No caso do foreach com o function como callback, o this, estará se referindo a própria função de callback, que não tem um campo chamado value, por isso você tem um undefined.

Já quando você usa o for, o this vai referenciar outra coisa que eu não consegui identificar no seu código.

Obrigado Wanderson,

No caso do for acredito ele está referenciando o campoFiltro (um input) que neste caso reconhece o value que é digitado pelo usuário.

:)